如何解决Clarity aka CA PPM:查询和 rowCount 冲突
我在下面添加了我的脚本;当我独立于脚本运行查询时,它会正确呈现一行数据。但是当我运行我的整个脚本时,我的日志显示没有行可以插入/更新到不准确的对象中。我的脚本遗漏了什么吗?我两天前对其进行了测试,效果很好,但现在不行了。也许我的眼睛已经看了这么多,我只是忽略了一些简单但寻求社区帮助的东西。
<gel:script xmlns:core="jelly:core" xmlns:gel="jelly:com.niku.union.gel.GELTagLibrary" xmlns:soap="jelly:com.niku.union.gel.soAPTagLibrary"
xmlns:soapEnv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sql="jelly:sql" xmlns:xog="http://www.niku.com/xog"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- CONNECT TO CLARITY DATABASE -->
<gel:setDataSource dbId="niku" var="clarityDB"/>
<!-- QUERY INVESTMENT BUDGET PLAN/ORIGINAL BUDGET PLAN informatION TO UPDATE supplier CONTRACTS SUMMARY LEVEL INSTANCES -->
<sql:query dataSource="${clarityDB}" escapeText="0" var="budgetPlanCostQuery"><![CDATA[
SELECT BGT.INV_DBID,BGT.INV_ID,BGT.INV_NAME,BGT.BUDGET_PLAN_DBID,BGT.BUDGET_PLAN_CODE,BGT.BUDGET_PLAN_NAME,BGT.BUDGET_PLAN_TOTAL,BGT.COST_TYPE_DBID,BGT.COST_TYPE_CODE,BGT.COST_TYPE,BGT.TRANSCLASS_DBID,BGT.TRANSCLASS,BGT.DETAIL_COST,BGT.OG_BUDGET_PLAN_CODE,BGT.OG_BUDGET_DETAIL_COST,BGT.CONTRACT_DBID,BGT.CONTRACT_CURRENT_BUDGET,BGT.CONTRACT_OG_BUDGET
FROM ( SELECT INV.ID INV_DBID,INV.CODE INV_ID,INV.NAME INV_NAME,FP.ID BUDGET_PLAN_DBID,FP.CODE BUDGET_PLAN_CODE,FP.NAME BUDGET_PLAN_NAME,FP.TOTAL_COST BUDGET_PLAN_TOTAL,FP_DET.COST_TYPE_ID COST_TYPE_DBID,CST_TYPE.LOOKUP_CODE COST_TYPE_CODE,CST_TYPE.NAME COST_TYPE,TC.ID TRANSCLASS_DBID,TC.DESCRIPTION TRANSCLASS,COALESCE(ROUND(SUM(FP_DET.TOTAL_COST),2),0) DETAIL_COST,OG_BUDGET.BUDGET_PLAN_CODE OG_BUDGET_PLAN_CODE,COALESCE(ROUND(OG_BUDGET.DETAIL_COST,0) OG_BUDGET_DETAIL_COST,COALESCE(CONTRACTS.ID,0) CONTRACT_DBID,CONTRACTS.U_CURRENTBUDGETACR CONTRACT_CURRENT_BUDGET,CONTRACTS.U_ACR_OBFA CONTRACT_OG_BUDGET
FROM INV_INVESTMENTS INV
LEFT JOIN FIN_PLANS FP ON INV.ID = FP.OBJECT_ID
AND FP.PLAN_TYPE_CODE = 'BUDGET'
AND FP.IS_PLAN_OF_RECORD = 1
JOIN FIN_COST_PLAN_DETAILS FP_DET ON FP.ID = FP_DET.PLAN_ID
JOIN CMN_LOOKUPS_V CST_TYPE ON CST_TYPE.ID = FP_DET.COST_TYPE_ID
AND CST_TYPE.LOOKUP_TYPE = 'LOOKUP_FIN_COSTTYPECODE'
AND CST_TYPE.LANGUAGE_CODE = 'en'
JOIN TRANSCLASS TC ON TC.ID = FP_DET.TRANSACTION_CLASS_ID
LEFT JOIN ( SELECT FP.OBJECT_ID,ROUND(SUM(FP_DET.TOTAL_COST),2) DETAIL_COST
FROM FIN_PLANS FP
JOIN FIN_COST_PLAN_DETAILS FP_DET ON FP.ID = FP_DET.PLAN_ID
JOIN CMN_LOOKUPS_V CST_TYPE ON CST_TYPE.ID = FP_DET.COST_TYPE_ID
AND CST_TYPE.LOOKUP_TYPE = 'LOOKUP_FIN_COSTTYPECODE'
AND CST_TYPE.LANGUAGE_CODE = 'en'
JOIN TRANSCLASS TC ON TC.ID = FP_DET.TRANSACTION_CLASS_ID
JOIN ( SELECT OBJECT_ID,MIN(REVISION) MIN_REVISION
FROM FIN_PLANS
WHERE PLAN_TYPE_CODE = 'BUDGET'
AND COALESCE(TOTAL_COST,0) != 0
GROUP BY OBJECT_ID) mfp ON FP.OBJECT_ID = mfp.OBJECT_ID
AND FP.REVISION = mfp.MIN_REVISION
WHERE FP.PLAN_TYPE_CODE = 'BUDGET'
GROUP BY FP.OBJECT_ID,FP.CODE,FP.NAME,FP.TOTAL_COST,FP_DET.COST_TYPE_ID,CST_TYPE.LOOKUP_CODE,CST_TYPE.NAME,TC.ID,TC.DESCRIPTION) OG_BUDGET ON INV.ID = OG_BUDGET.OBJECT_ID
AND FP_DET.COST_TYPE_ID = OG_BUDGET.COST_TYPE_DBID
AND TC.ID = OG_BUDGET.TRANSCLASS_DBID
LEFT JOIN ODF_CA_U_supplier_CONTRACTS CONTRACTS ON INV.ID = CONTRACTS.ODF_PARENT_ID
AND CST_TYPE.LOOKUP_CODE = CONTRACTS.U_COST_TYPE
AND FP_DET.TRANSACTION_CLASS_ID = CONTRACTS.U_EXPEND_TYPE
AND CONTRACTS.U_BUDGET_SUMMARY = 1
--WHERE INV.ID = 5229096
WHERE INV.ID =?
GROUP BY INV.ID,INV.CODE,INV.NAME,FP.ID,TC.DESCRIPTION,CONTRACTS.ID,OG_BUDGET.BUDGET_PLAN_CODE,ROUND(OG_BUDGET.DETAIL_COST,CONTRACTS.U_CURRENTBUDGETACR,CONTRACTS.U_ACR_OBFA) BGT
WHERE COALESCE(BGT.DETAIL_COST,0) != COALESCE(BGT.CONTRACT_CURRENT_BUDGET,0) OR
COALESCE(BGT.OG_BUDGET_DETAIL_COST,0) != COALESCE(BGT.CONTRACT_OG_BUDGET,0)]]>
<sql:param value="${gel_objectInstanceId}"/>
</sql:query>
<!-- ROW COUNT OF RECORDS RETURNED -->
<gel:log level='INFO'>RowCount: ${budgetPlanCostQuery.rowCount}</gel:log>
<!-- PROCESS IF RETURNED ROWS > 0 -->
<core:if test="${budgetPlanCostQuery.rowCount gt 0}">
<!-- LOOP EACH RETURNED ROW -->
<core:forEach items="${budgetPlanCostQuery.rows}" var="budgetPlanCost">
<core:choose>
<!-- CREATE NEW supplier CONTRACT BUDGET SUMMARY LEVEL (DOES NOT EXIST) -->
<core:when test="${budgetPlanCost.CONTRACT_DBID eq 0}">
<!-- GET supplier CONTRACTS NEXT AUTONUMBER FOR CODE -->
<core:invoke method="getConnection" on="${clarityDB}" var="dbConn"/>
<core:catch var="autoNumberCatch">
<core:set value="CALL CMN_AUTONUM_GET_NEXT_SP('u_supplier_contracts','code','NIKU.ROOT',NULL,? )" var="autoNumsql"/>
<core:invoke method="prepareCall" on="${dbConn}" var="pAutoNumsql">
<core:arg type="java.lang.String" value="${autoNumsql}"/>
</core:invoke>
<core:invoke method="registerOutParameter" on="${pAutoNumsql}">
<core:arg type="java.lang.Integer" value="1"/>
<core:arg type="java.lang.Integer" value="12"/>
</core:invoke>
<core:invoke method="executeUpdate" on="${pAutoNumsql}"/>
<core:invoke method="getString" on="${pAutoNumsql}" var="nextCode">
<core:arg type="java.lang.Integer" value="1"/>
</core:invoke>
<core:invoke method="close" on="${pAutoNumsql}"/>
</core:catch>
<core:if test="${autoNumberCatch != null}">
<gel:log level="INFO"><![CDATA[Auto-Number Error: ${autoNumberCatch}]]></gel:log>
</core:if>
<!--gel:log level='INFO'>nextCode: ${nextCode}</gel:log-->
<!-- LOG RECORD informatION -->
<gel:log level='INFO'>INV_DBID: ${budgetPlanCost.INV_DBID}. COST_TYPE_CODE: ${budgetPlanCost.COST_TYPE_CODE}. TRANSCLASS_DBID: ${budgetPlanCost.TRANSCLASS_DBID}. DETAIL_COST: ${budgetPlanCost.DETAIL_COST}. OG_BUDGET_DETAIL_COST: ${budgetPlanCost.OG_BUDGET_DETAIL_COST}</gel:log>
<!-- GET supplier CONTRACTS NEXT DBID -->
<core:invokeStatic var="nextDbid" className="com.niku.union.persistence.utils.IdGenerator" method="getCommonIdNextValue" >
<core:arg type="java.lang.String" value="ODF_CA_U_supplier_CONTRACTS" />
<core:arg type="java.lang.String" value="ODF_CA_U_supplier_CONTRACTS_S1" />
<core:arg type="com.niku.union.security.SecurityIdentifier" value="${context.getSecurityIdentifier()}" />
</core:invokeStatic>
<!--gel:log level='INFO'>nextDbid: ${nextDbid}</gel:log-->
<!-- INSERT NEW RECORD -->
<core:catch var="insertNewCatch">
<sql:update dataSource="${clarityDB}" escapeText="0" var="update"><![CDATA[
INSERT INTO ODF_CA_U_supplier_CONTRACTS
(ID,CREATED_DATE,CREATED_BY,LAST_UPDATED_DATE,LAST_UPDATED_BY,PARTITION_CODE,NAME,CODE,ODF_PARENT_ID,ODF_CNCRT_PARENT_ID,U_COST_TYPE,U_EXPEND_TYPE,U_CURRENTBUDGETACR,U_ACR_OBFA,U_BUDGET_SUMMARY)
VALUES
(?,SYSDATE,1,?,1)]]>
<sql:param value="${nextDbid}"/>
<sql:param value="${nextCode}"/>
<sql:param value="${nextCode}"/>
<sql:param value="${budgetPlanCost.INV_DBID}"/>
<sql:param value="${budgetPlanCost.INV_DBID}"/>
<sql:param value="${budgetPlanCost.COST_TYPE_CODE}"/>
<sql:param value="${budgetPlanCost.TRANSCLASS_DBID}"/>
<sql:param value="${budgetPlanCost.DETAIL_COST}"/>
<sql:param value="${budgetPlanCost.OG_BUDGET_DETAIL_COST}"/>
</sql:update>
</core:catch>
<core:if test="${insertNewCatch != null}">
<gel:log level="INFO"><![CDATA[Insert New Error: ${insertNewCatch}]]></gel:log>
</core:if>
</core:when>
<core:otherwise>
<!-- UPDATE EXISTING RECORD -->
<core:catch var="updateCatch">
<sql:update dataSource="${clarityDB}" escapeText="0" var="update"><![CDATA[
UPDATE ODF_CA_U_supplier_CONTRACTS CONTRACTS
SET U_CURRENTBUDGETACR = ?,U_ACR_OBFA = ?
WHERE CONTRACTS.ODF_PARENT_ID = ?
AND CONTRACTS.U_COST_TYPE = ?
AND CONTRACTS.U_EXPEND_TYPE = ?
AND CONTRACTS.ID = ?
]]>
<sql:param value="${budgetPlanCost.DETAIL_COST}"/>
<sql:param value="${budgetPlanCost.OG_BUDGET_DETAIL_COST}"/>
<sql:param value="${budgetPlanCost.INV_DBID}"/>
<sql:param value="${budgetPlanCost.COST_TYPE_CODE}"/>
<sql:param value="${budgetPlanCost.TRANSCLASS_DBID}"/>
<sql:param value="${budgetPlanCost.CONTRACT_DBID}"/>
</sql:update>
</core:catch>
<core:if test="${updateCatch != null}">
<gel:log level="INFO"><![CDATA[Update Error: ${updateCatch}]]></gel:log>
</core:if>
</core:otherwise>
</core:choose>
<!-- CLOSE DATABASE CONNECTION -->
<core:if test="${dbConn != null}">
<core:invoke method="close" on="${dbConn}"/>
</core:if>
</core:forEach>
</core:if>
</gel:script>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。