问题标签 [peoplesoft-app-engine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
peoplesoft - 应用程序引擎程序 - 发生 NULL 插入错误
我有下面的应用程序引擎程序,我正在稍微修改,现在我得到一个 NULL 插入错误(无法将值 NULL 插入列 'EFFDT',表 'XXX.dbo.PS_ITM_VNDR_UOM_PR'。在While
块中有一条SQLExec
语句:
SQLExec("SELECT A.VENDOR_ID FROM PS_ITM_VENDOR A, PS_ITM_VNDR_UOM B WHERE A.SETID = B.SETID AND A.INV_ITEM_ID = B.INV_ITEM_ID AND A.VENDOR_SETID = B.VENDOR_SETID AND A.VENDOR_ID = B.VENDOR_ID AND A.VENDOR_ID = :1 AND A.INV_ITEM_ID = :2 AND A.ITM_ID_VNDR = :3 AND A.ITM_VNDR_PRIORITY = 1 AND B.UNIT_OF_MEASURE = :4 AND B.CONVERSION_RATE = :5", &VendorId, &InvItemId, &ItmIdVndr, &UOM, &ConvRate, &VendorId_check);
需要修改程序以允许在尚不存在 UOM (UNIT_OF_MEASURE) 的地方插入新记录,因此我删除了对 UNIT_OF_MEASURE 的引用,如下所示,以便程序评估为 Else 条件:
SQLExec("SELECT A.VENDOR_ID FROM PS_ITM_VENDOR A, PS_ITM_VNDR_UOM B WHERE A.SETID = B.SETID AND A.INV_ITEM_ID = B.INV_ITEM_ID AND A.VENDOR_SETID = B.VENDOR_SETID AND A.VENDOR_ID = B.VENDOR_ID AND A.VENDOR_ID = :1 AND A.INV_ITEM_ID = :2 AND A.ITM_ID_VNDR = :3 AND A.ITM_VNDR_PRIORITY = 1 AND B.CONVERSION_RATE = :4", &VendorId, &InvItemId, &ItmIdVndr, &ConvRate, &VendorId_check);
但是,当我从上述代码块中删除 UNIT_OF_MEASURE SQL 和变量时,我会在表 ITM_VNDR_UOM_PR 的 EFFDT 列上收到 NULL 插入错误。似乎 &SQL CreateSQL 中定义的 &UOM 变量没有延续到插入 SQL 代码中。为什么会发生这种情况?在插入新行时,我可以做些什么来纠正并仍然能够使用 &UOM 的原始实例/值?以下是整个程序步骤:
peoplesoft - 如何在变量中存储多个 SQLExec 值
我想知道在应用程序引擎 PeopleCode 中是否可以运行 SQLExec 命令,如果返回多行,它们是如何存储在变量中的?
例如 - 我正在添加以下代码:
SQLExec("SELECT C.UNIT_OF_MEASURE FROM PS_ITM_VNDR_UOM_PR C WHERE C.INV_ITEM_ID = :1 AND C.VENDOR_ID = :2 AND C.EFFDT = (SELECT MAX(C1.EFFDT) FROM PS_ITM_VNDR_UOM_PR C1 WHERE C.SETID = C1.SETID AND C.INV_ITEM_ID = C1.INV_ITEM_ID AND C.VENDOR_SETID = C1.VENDOR_SETID AND C.VENDOR_ID = C1.VENDOR_ID AND C.VNDR_LOC = C1.VNDR_LOC AND C.UNIT_OF_MEASURE = C1.UNIT_OF_MEASURE AND C.CURRENCY_CD = C1.CURRENCY_CD AND C.QTY_MIN = C1.QTY_MIN)" , &InvItemId, &VendorID, &UOMResult
在某些情况下,可能会从 SQL 查询将不止一行(值)传递回 &UOMResult 变量,我不确定 PeopleCode 将如何处理此问题,但最终我想将 &UOMResult 变量中的值与另一个进行比较名为 &UOM 的变量,如果它们不同(没有匹配项),则执行某些“东西”,否则执行“其他东西”。
如果 SQL 返回的值超过 1 个,变量是否会转换为数组?只是想知道这会是什么样子......感谢您的任何反馈。
10/17/18 编辑:
peoplesoft - 如果 SQL Fetch/Loop 的最后一行未找到匹配项,则执行逻辑
我有以下正在修改的应用程序引擎程序。我基本上是为在 CSV/文件布局中输入的项目的度量单位 (&UOMResult) 与为同一项目检索到的现有行的值不匹配的情况添加代码,然后我执行 REC .INSERT,否则如果找不到匹配项,那么我将通过不同的 REC1.INSERT 逻辑。
我的理解是 SQL Fetch 函数(&SQL2.Fetch)一次只能获取一行数据并将其存储到一个变量中(如果我错了,请纠正我),因此我必须包含一个 While 循环语句来继续获取所有行,一次一个(如果有 &SQL2.Fetch 的替代方法可以在同一迭代中处理多行,请告诉我)。基于此,我在代码中添加了循环 &SQL2.Fetch 并且如果有匹配的行(到变量 &UOM)然后我做一个 REC.INSERT 处理然后中断循环,否则它继续循环(使用继续功能-不知道是否有必要)通过比较下一行,直到找到匹配项并中断或-(我打算这样做)进入 REC2.Insert 逻辑。我不
现在它的编码方式恐怕在永远不匹配的情况下会是一个无限循环。我希望在整个循环迭代完成后(已读取最后一行)并且没有匹配项,然后转到 REC2.Insert 逻辑。有没有办法让代码知道最后一行已经循环通过,如果是这样,我该如何相应地更改它?
您将在上面的代码中看到对 &SQL2 和 While 语句的引用,以及我在比较最后一行后如何处理的“需要帮助”注释。也欢迎任何有关整体程序流程的建议。谢谢!
10/23/18 编辑:
peoplesoft - PeopleCode中行、行集的功能
我试图更好地理解行和行集在 PeopleCode 中的用途?我已经阅读了 PeopleBooks,但仍然觉得我没有很好的理解。我希望更多地了解这些与应用程序引擎程序有关的内容。也许通过一个例子可能会有所帮助。以下是我的一些具体问题:
我了解 Rowsets、Row、Record 和 Field 用于访问组件缓冲区数据,但是对于通过 Process Scheduler 运行的独立应用程序引擎程序仍然是这种情况吗?
CreateSQL
与使用 SQL 对象/函数( 、、SQLExec
等)相比,使用这些有什么需要或优势?我经常在 AE 程序中看到CreateRowset
对象被实例化并使用.Fill
带有 SQL WHERE 子句的方法,但我不太明白为什么不使用 SQL。我在 PeopleBooks 中看到组件滚动中的 Row 对象是一行,组件滚动与行有何关系?我已经看到对具有不同滚动级别的行的引用,这只是分组和嵌套相关数据的一种方式吗?
实例化
CreateRowset
对象后,它在程序中的典型用途是什么?您将如何对行集检索到的数据执行逻辑(If、Then、Else 等),或使用它来更新数据?
我很感激你可以分享的任何见解。
peoplesoft - 如何在应用程序设计 PeopleSoft 中编写 Max effe date < 2 年
我需要提取连续 2 年以上不活动的学生数据。
peoplesoft - PeopleSoft App Engine 程序流程如何发生
我正在了解有关 PeopleSoft 应用程序引擎程序流程的更多信息。根据我在 PeopleBooks 中阅读的内容,步骤中的任何指定 aDo Select
或Do When
执行Do While
循环活动的操作,其中所有后续操作(在该步骤内)一次循环通过一行。
我见过一些 App Engine 程序,包括下面的一个,其中一个Do Select
动作发生在一个步骤中,然后是一个Call Section
执行程序另一个部分的动作。这是否意味着循环仍然一次遍历被调用部分的一行,就像在调用步骤中重复任何其他操作一样?
我的第二个问题特定于以下 App Engine 程序。在程序底部突出显示的 PeopleCode 操作中,您可以看到它运行 PeopleCode 来检查/比较数据元素,然后退出。我的问题是,这段代码是在循环动作的上下文中运行的,它一次执行一行,还是通过同时查看缓冲区中的所有内容来执行?我认为它只能逐行处理,因为它需要正确退出/中断该步骤。希望我的问题是有道理的,但我很高兴澄清是必要的。谢谢!
peoplesoft - 运行应用引擎时如何知道应用包中记录和字段的值?
所以我有这个Application Engine,调用这个Application Package,这个应用包有一个CreateSql(Select...)
语句,并且一些记录和字段是动态的。
我的问题是——我怎么可能知道这些动态记录和字段具有什么价值?
我尝试MessageBox
对应用程序包进行操作,但它没有显示在应用程序引擎的消息日志中。
知道怎么做吗?
peoplesoft - 有没有办法在 Peoplesoft 查询管理器中使用 WITH 子句?
我在 Oracle SQL 中多次使用 WITH 子句,并且知道超过 90% 的时间它执行得更快,但是由于我正在开发 Peoplesoft 应用程序,所以我只是想知道有没有办法在Peoplesoft 查询管理器呢?
peoplesoft - CreateRecord 更新方法不更新表
我已经修改了下面的 App Engine 程序,以使用文件布局更新现有行上的字段。我添加了代码来更新填充了新供应商项目 ID 的项目的现有行。虽然程序在运行时不会出错,但它实际上也不会使用 ITM_ID_VNDR 字段更新表 PS_ITM_VENDOR。程序适当地读取文件布局,我可以显示 ITM_ID_VNDR 的变量。我不确定我是否为 CreateRecord 类正确使用了 .Update 方法。底部的“2020 年 1 月 7 日”评论注明了这些更改。
更新:我可以在跟踪文件中看到我在尝试更新时没有选择表的关键字段。我认为这是问题的一部分......
peoplesoft - 使用 Peoplesoft 数据元素生成 HTML 格式的电子邮件
我正在尝试生成一个 App Engine 程序,该程序将为即将到来的雇佣周年纪念日(即 5 年、10 年等)向员工发送电子邮件,并在剩余天数的电子邮件正文中显示一种倒数计时器直到他们的周年纪念日。我正在考虑在 App Engine 程序中使用 MCF 类框架来执行此操作。我将使用 PS_EMPLOYEES 表中的 SERVICE_DT 字段来让用户在周年纪念日的范围内。我想知道如何使用 PeopleCode 将数据元素(即 SERVICE_DT)映射到将在电子邮件中显示的 HTML 元素。对此或代码示例的任何帮助都会有所帮助。提前致谢。