Call Component Interface from AE

2023-05-16

Local File &Source, &fileLog;
Local string &strLine, &FilePath, &EmplStatus;
Local array of string &Item;
Local number &Line, &SucCNT, &FailCNT;

Local ApiObject &oSession, &oCiJobDataChange;
Local ApiObject &oCollNameTypeVwCollection, &oCollNameTypeVw;
Local ApiObject &oCollNamesCollection, &oCollNames;
Local ApiObject &oCollAddressTypeVwCollection, &oCollAddressTypeVw;
Local ApiObject &oCollAddressesCollection, &oCollAddresses;
Local ApiObject &oCollPersonalPhoneCollection, &oCollPersonalPhone;
Local ApiObject &oCollEmailAddressesCollection, &oCollEmailAddresses;
Local ApiObject &oCollPersDataEffdtCollection, &oCollPersDataEffdt;
Local ApiObject &oCollPersNidCollection, &oCollPersNid;
Local ApiObject &oCollJobCollection, &oCollJob;
Local ApiObject &oCollJobJrCollection, &oCollJobJr;
Local ApiObject &oCollCompensationCollection, &oCollCompensation;
Local ApiObject &oCollJobEarnsDistCollection, &oCollJobEarnsDist;
Local ApiObject &oCollBenProgParticCollection, &oCollBenProgPartic;

Function errorHandler()
   Local ApiObject &oPSMessageCollection, &oPSMessage;
   Local number &i;
   Local string &sErrMsgSetNum, &sErrMsgNum, &sErrMsgText, &sErrType;
  
   &oPSMessageCollection = &oSession.PSMessages;                           
   For &i = 1 To &oPSMessageCollection.Count
      &oPSMessage = &oPSMessageCollection.Item(&i);
      &sErrMsgSetNum = &oPSMessage.MessageSetNumber;
      &sErrMsgNum = &oPSMessage.MessageNumber;
      &sErrMsgText = &oPSMessage.Text;
      &fileLog.WriteLine("          " | &sErrType | " (" | &sErrMsgSetNum | "," | &sErrMsgNum | ") - " | &sErrMsgText);
   End-For;
   rem ***** Delete the Messages from the collection *****;
   &oPSMessageCollection.DeleteAll();
End-Function;


rem ***** Set the Log File *****;
&fileLog = GetFile("CI_JOB_DATA_CHANGE.log", "w", "a", %FilePath_Relative);
rem ***** Get current PeopleSoft Session *****;
&oSession = %Session;

rem ***** Set the PeopleSoft Session Error Message Mode *****;
rem ***** 0 - None *****;
rem ***** 1 - PSMessage Collection only (default) *****;
rem ***** 2 - Message Box only *****;
rem ***** 3 - Both collection and message box *****;
&oSession.PSMessagesMode = 1;

rem ***** Get the Component Interface *****;
&oCiJobDataChange = &oSession.GetCompIntfc(CompIntfc.TSC_SALARY_INCREASE_CI);
If &oCiJobDataChange = Null Then
   &fileLog.WriteLine("Error in Get ComponentInterface - TSC_SALARY_INCREASE_CI.");
   errorHandler();
   throw CreateException(0, 0, "GetCompIntfc failed");
Else
   &fileLog.WriteLine("Success! Get ComponentInterface - TSC_SALARY_INCREASE_CI.");
End-If;

rem ***** Set the Component Interface Mode *****;
&oCiJobDataChange.InteractiveMode = False;
&oCiJobDataChange.GetHistoryItems = True;
&oCiJobDataChange.EditHistoryItems = False;

rem &FilePath = "E:\interface\" | %DbName | "\salary\z_load_salary.csv";
&FilePath = "E:\test.csv";
&Source = GetFile(&FilePath, "R", %FilePath_Absolute);

&Line = 0;
&SucCNT = 0;
&FailCNT = 0;

&fileLog.WriteLine("------------------------------------------------------------------------------------------------------------------------------");

While &Source.ReadLine(&strLine)
  
   &Line = &Line + 1;
   &Item = Split(&strLine, ",");
  
  
   SQLExec("SELECT A.EMPL_STATUS FROM PS_JOB A WHERE A.EMPLID = :1 AND A.EMPL_RCD = 0 AND A.EFFDT = (SELECT MAX(B.EFFDT) FROM PS_JOB B WHERE B.EMPLID = A.EMPLID AND B.EMPL_RCD = 0) ", &Item [1], &EmplStatus);
  
   If &EmplStatus = "A" Then
     
      rem ***** Set Component Interface Get/Create Keys *****;
      If All(&Item [1]) Then
         &oCiJobDataChange.KEYPROP_EMPLID = &Item [1];
      End-If;
      &oCiJobDataChange.KEYPROP_EMPL_RCD = 0;
     
      rem ***** Execute Create ******;
      If Not &oCiJobDataChange.Get() Then;
         rem ***** Unable to Create Component Interface for the Add keys provided. *****;
         &fileLog.WriteLine("Error! Can Not Get Employee When Processing " | &Line | ", Employee " | &Item [1] | ".");
         errorHandler();
      Else
        
         rem ***** Set/Get COLL_JOB Collection Field Properties -- Parent: PS_ROOT Collection *****;
         &oCollJobCollection = &oCiJobDataChange.COLL_JOB;
         &oCollJob = &oCollJobCollection.InsertItem(&oCollJobCollection.CurrentItemNum());
         &oCollJob.KEYPROP_EFFDT = Date(&Item [2]);
        
         SQLExec("SELECT COUNT(*) FROM PS_JOB WHERE EMPLID=:1 AND EMPL_RCD=:2 AND EFFDT=%DateIn(:3)", &Item [1], 0, &Item [2], &CNT);
        
         &oCollJob.KEYPROP_EFFSEQ = &CNT;
         &oCollJob.PROP_ACTION = &Item [3];
        
         If Not None(&Item [4]) Then
            &oCollJob.PROP_ACTION_REASON = &Item [4];
         End-If;
        
         rem ***** Set COLL_COMPENSATION Collection Field Properties -- Parent: COLL_JOB Collection *****;
         If &Item.Len >= 5 Then
            If Not None(&Item [5]) Then
               &oCollCompensationCollection = &oCollJob.COLL_COMPENSATION;
               &oCollCompensation = &oCollCompensationCollection.Item(1);
               REM &oCollCompensation.KEYPROP_COMP_RATECD = "MONPAY";
               &oCollCompensation.PROP_COMPRATE = &Item [5];
              
               &oCollJob.PROP_CALC_COMP_BTN = "!";
            End-If;
         End-If;
        
         rem ***** Execute Save *****;
         If Not &oCiJobDataChange.Save() Then;
           
            REM Count as Fail;
            &FailCNT = &FailCNT + 1;
            &fileLog.WriteLine("Error! Can Not Save Employee When Process Line " | &Line | ", Employee " | &Item [1] | ".");
            errorHandler();
         Else
           
            REM Count as Success;
            &FailCNT = &FailCNT + 1;
            &fileLog.WriteLine("Success! Finish Process Line " | &Line | ", Employee " | &Item [1] | ".");
            errorHandler();
         End-If;
        
         rem ***** Execute Cancel *****;
         If Not &oCiJobDataChange.Cancel() Then;
            &fileLog.WriteLine("Error! Can Not Cancel Employee When Process Line " | &Line | ", Employee " | &Item [1] | ".");
            errorHandler();
         End-If;
        
      End-If;
     
   Else
      REM When Employee Status Is Not Active;
      &fileLog.WriteLine("Error! Can Process Inactive Employee When Process Line " | &Line | ", Employee " | &Item [1] | ".");
     
      REM Count as Fail;
      &FailCNT = &FailCNT + 1;
   End-If;
  
   CommitWork();
   CollectGarbage();
  
End-While;


&fileLog.WriteLine("End");
&fileLog.Close();

转载于:https://www.cnblogs.com/GoDevil/archive/2009/07/10/1520567.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Call Component Interface from AE 的相关文章

  • 到底什么是“基于接口的编程”?

    我经常听到 读到基于接口的编程 但我不太清楚它的真正含义 基于接口的编程是一个实际的独立主题 实际上有关于它的书籍吗 如果有的话 谁能推荐一些好的吗 当我阅读有关如何设计优秀 API 的内容时 我遇到了基于接口的编程 并且想了解更多相关信息
  • Notepad++改变文字颜色?

    我正在使用 Notepad 来模拟 ISPF 屏幕 我使用 StyleConfigurator 选择合适的字体 将其着色为绿色 并设置黑色背景 如何永久更改所选文本的颜色 例如 如果我的客户名称 THALECRESS 如何将客户名称 蓝色
  • 反射值接口和指针接收器

    在golang的mongodb驱动中有以下代码 case reflect Struct if z ok v Interface Zeroer ok return z IsZero return false Zeroer 接口定义如下 typ
  • 如何通过反射忽略父接口上的事件来获取类型的事件

    我有以下代码 Type type var events type GetEvents BindingFlags DeclaredOnly BindingFlags Instance BindingFlags Public ToList 然而
  • Java 类和接口名称冲突

    interface A void print class A implements A public void print System out println Hello public static void main String ar
  • DTO 接口

    我目前正在开始开发一个大型 Web 应用程序 主要包含 Angular SPA 和可以访问后端层的 OData WebAPI 我们正处于早期阶段 并已开始实施第一批课程 包括Model dll它位于公共名称空间中 以便所有层都可以访问它 我
  • 如何在 Kotlin 中编写以下代码来实现回调

    我如何像java一样用Kotlin编写 Callback callback new Callback Override public void getCallback ServerResponse serverResponse var ca
  • 使用 ctypes 从 python 调用 C 函数

    我有以下 C 代码 我正在尝试使用Python从Python调用这个函数ctypes int add int arr printf number d n arr 0 arr 0 1 return arr 0 我用以下方法编译了这个 gcc
  • 如何在“X”秒后调用 jquery 函数

    我有一个 jquery 函数 我需要在 Iframe 中打开网站后调用它 我正在尝试在 Iframe 中打开一个网络链接 打开它后我需要调用以下函数 那么我该怎么做呢 这是我的功能
  • Android 调用另一个类的方法

    我知道这个问题重复了 但我在互联网上找不到答案 我想调用另一个类的方法 我有Class1和Class2 在第2类中我有这个方法 public void UpdateEmployee some code 我想从Class1调用上面的方法 感谢
  • 使用 Google Mock 进行 C++ 高性能单元测试?

    我正在使用 Google Mock 并且正在努力模拟 C 系统调用 特别是 C 11 chrono 函数 我知道我应该创建一个接口 创建一个类来实现我的实际实现的接口 然后在我的测试中模拟该接口 我正在尝试编写一个嵌入式应用程序 因此这种间
  • 类型“TNestedInterface”必须可转换为“INestedInterfaceTest”才能将其用作参数“TNestedInterface”

    public interface INestedInterfaceTest
  • 具有混合成员类型的通用 TypeScript 接口

    对于几个 HTML 表单 我想配置输入并处理它们的值 我的类型具有以下结构 您可以将其复制到 TypeScript Playgroundhttp www typescriptlang org play http www typescript
  • 将 PHP 的不同变量输入接收到 C++ 中

    我有一个程序需要发送以下变量 Bool int string vector
  • Golang:我可以投射到 chan 接口吗{}

    我正在尝试为订阅编写一个通用包装器 例如 type Subscriber interface Subscribe addr string chan interface 假设有一个我想使用的库 其中有一个 subscribe 方法 但它使用c
  • TypeScript 函数声明在接口中的区别

    TypeScript 接口中这两种函数声明有什么区别 interface IExample myFunction str string void and interface IExample myFunction str string gt
  • JDK 8 中的默认值是 Java 中多重继承的一种形式吗?

    JDK 8 中的一项新功能允许您添加到现有接口 同时保留二进制兼容性 语法就像 public interface SomeInterface void existingInterface void newInterface default
  • 如何列出运行时函数的所有调用?

    有什么办法可以list 在VS中显示 写入文件 所有来电者 对象 函数 一个函数的当程序运行时 可能使用调试器 我需要record 所有通话 包括来电者 一个函数的从计划启动到终止 简单扫描源代码或二进制文件不做这份工作因为该程序可以作为服
  • 如何实现有效的 Java 特征?

    请告诉我这是否不合适 特别是 Programmers SE 或其他东西是否更适合这个问题 好吧 因此 我目前将许多 特征 表达为接口 我们称它们为 可更新 和 可破坏 将它们表达为接口的缺点是我无法在所有 可破坏 组件之间共享行为 另一方面
  • 安卓中的界面

    我在 android 中编写了一个包含图像和视频视图的表格布局 我想在 android 中编写一个界面 它将在不干扰我的布局的情况下获取图像以及数据和视频 该数据可以采用任何形式 来自任何来源 并且必须通过接口提供给布局 我应该如何为我在a

随机推荐

  • kali安装火狐浏览器

    第一步 xff1a apt get remove iceweasel 第二步 xff1a echo e 34 ndeb http downloads sourceforge net project ubuntuzilla mozilla a
  • 【Kubernetes】The connection to the server <master>:6443 was refused - did you specify the right host ...

    不知道怎么用着用着 xff0c 使用kubectl 时报错 xff0c 错误如下 xff1a root 64 R740 2 2 kubectl get pod The connection to the server 107 105 136
  • 自己动手不求人 - 手工Ghost安装xp、win7系统教程

    由于初级阶段的基本国情 xff0c 很多朋友第一次安装系统大多是用的ghost光盘 xff0c 设置好启动项 xff0c 放进光驱 xff0c 重启后选择安装XX到C盘 xff0c 整个系统就完成了 xff0c 方便快捷 在U盘启动越来越流
  • Security Definitions

    PeopleSoft security is designed around three definition types Permission Lists A set of access rights to application obj
  • 【转】成为Java顶尖程序员 ,看这10本书就够了

    学习的最好途径就是看书 xff0c 这是我自己学习并且小有了一定的积累之后的第一体会 个人认为看书有两点好处 xff1a 1 能出版出来的书一定是经过反复的思考 雕琢和审核的 xff0c 因此从专业性的角度来说 xff0c 一本好书的价值远
  • 【设计模式】我终于读懂了访问者模式。。。

    x1f330 测评系统的需求 将观众分为男人和女人 xff0c 对歌手进行测评 xff0c 当看完某个歌手表演后 xff0c 得到他们对该歌手不同的评价 评价 有不同的种类 xff0c 比如 成功 失败 等 传统方案 x1f331 传统方式
  • MVVM(微软的WPF基础)-MVC(常用模型/设计)-WPF(微软.NETFramework3.0

    为什么80 的码农都做不了架构师 xff1f gt gt gt 最近看 好多人说IOS MVC 过时了 要用MVVM 什么什么的 xff0c 感觉 很新奇 xff0c 就去搜了一下 xff0c 发现原来所谓的MVVM就是 之前微软在10年左
  • prometheus mysql_prometheus监控多个MySQL实例

    之前文章介绍了prometheus grafana exporter的安装以及基本使用 xff0c 在添加mysql监控节点的部分 xff0c 使用了分离部署 43 环境变量的方式 xff0c 如下所示 xff1a 添加MySQL监控 添加
  • NSIS:使用nsWindows.nsh头文件调整窗体大小

    原文 NSIS xff1a 使用nsWindows nsh头文件调整窗体大小 此方法只能简单实现调整窗体大小 xff0c 但不完美 xff0c 调整后窗体上其他的控件都需要调整大小或位置 xff0c 比较麻烦 xff0c 轻狂不建议使用呵
  • iOS 强大第三方资源库

    Github用法 git recipesGit recipes in Chinese 高质量的Git中文教程 lark怎样在Github上面贡献代码 my git有关 git 的学习资料 gitignore非常赞 有用的 gitignore
  • SpringBoot文件上传异常之提示The temporary upload location xxx is not valid

    原文 一灰灰Blog之Spring系列教程文件上传异常原理分析 SpringBoot搭建的应用 xff0c 一直工作得好好的 xff0c 突然发现上传文件失败 xff0c 提示org springframework web multipar
  • 彻底搞懂Object和Function的关系

    Object和Function的关系其实属于原型链的知识范畴 xff0c 如果对于原型链 原型继承还不熟悉的话 xff0c 可以戳这边o xffe3 xffe3 o Object Function和其它对象的关系可以归纳为下面四点 xff1
  • 前后端分离中的无痛刷新token机制

    今天我们来说一说前后端分离中的无痛刷新token机制 xff0c 在手机app中应该经常用到 xff0c 大家都知道在前后端是以token的形式交互 xff0c 既然是token xff0c 那么肯定有它的过期时间 xff0c 没有一个to
  • 理解并配置:IPv6的静态路由与默认路由

    不论是IPv4或者是IPv6的网络环境都完整的支持静态路由 xff0c 静态路由是指由网络管理员手工配置的路由信息 当网络的拓扑结构或链路的状态发生变化时 xff0c 网络管理员需要手工去修改路由表中相关的静态路由信息 静态路由信息在缺省情
  • SQL删除外键约束

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 使用如下SQL语句查询出表中外键约束名称 xff1a span style color 008080 1 span span style color 0000ff sele
  • Windows域控服务器查询命令

    根据Windows版本不同 xff0c 命令有所不同 查本机用户表 net user 查本机管理员 net localhroup administrators 查域管理用户 net group 34 domain dadmins 34 do
  • 【设计模式】我终于读懂了迭代器模式。。。

    看一个具体的需求 编写程序展示一个学校院系结构 xff1a 需求是这样 要在一个页面中展示出学校的院系组成 xff0c 一个学校有多个学院 xff0c 一个学院有多个系 如图 xff1a 传统的设计方案 类图 传统的方式的问题分析 将学院看
  • stm32f103zet6引脚说明

    stm32f103zet6是一种嵌入式 微控制器的集成电路 xff08 IC xff09 xff0c 是由ST公司开发的STM32F1系列的其中一种 xff0c 芯体尺寸是32位 xff0c 速度是72MHz xff0c 程序存储器容量是2
  • 连接postgres特别消耗cpu资源而引发的PostgreSQL性能优化考虑 .

    由于是开发阶段 xff0c 所以并没有配置postgres的参数 xff0c 都是使用安装时的默认配置 xff0c 以前运行也不见得有什么不正常 xff0c 可是前几天我的cpu资源占用突然升高 查看进程 xff0c 发现有一个postgr
  • Call Component Interface from AE

    Local File amp Source amp fileLog Local string amp strLine amp FilePath amp EmplStatus Local array of string amp Item Lo