This issue has most to do with the way data is originally retrieved from the IBMi from the Zone Decimal value. If a sign is included, then based on hex values, it replaces the last digit with it's Hex Representation, instead of the actual number.
I would first look at making sure you retrieve the value from your IBMi with an SQL Select Statement to get the actual value with the sign. If this isn't possible, then I've attached a "Utility" I created that will translate the Zoned Decimal Number to the actual number if needed.
This could be called from within your project by doing a callProject and passing it the value that needs to be converted. The return value would be used to insert into your table.
If you have any other questions, please let me know...
Example of how to call the Utility
Code: Select all<callProject label="Convert ZD Value" project="/Utilities/Convert Zoned Decimal Data" runInSameJob="true" inheritUserVariables="true" returnUserVariables="true" mode="interactive" version="1.0">
<variable name="ZDFrom" value="${ MyZonedValue }" />
<variable name="ZDTo" value="0" />
</callProject>
<setVariable label="My Translated Value" name="MyTranslatedValue" value="${ ZDTo }" version="2.0" />
Convert Zoned Decimal Value (Must be a GAD Version 4.0.0+)
Code: Select all<project name="Convert Zoned Decimal Data" mainModule="Main" version="2.0" logLevel="silent">
<description>Converts a value from the Zoned Decimal Representation to actual value</description>
<module name="Main">
<if label="Check Parm for Value" condition="${ IsEmpty( ZDFrom ) }">
<raiseError label="No Value Passed" version="1.0">
<message>The Parameter ZDFrom has no value to convert. Please retry with value.</message>
</raiseError>
</if>
<setVariable label="Get Length of ZDFrom" name="FrLen" value="${ Length( Trim( ZDFrom ) ) }" version="2.0" />
<setVariable label="Get Convert Value" name="CvtVar" value="${ Substring( ZDFrom, FrLen, 1 ) }" version="2.0" />
<setVariable label="Positive Number?" name="Pos" value="${ PositionOf( PosNums, CvtVar ) -1 }" version="2.0" />
<setVariable label="Negative Number?" name="Neg" value="${ PositionOf( NegNums, CvtVar ) -1 }" version="2.0" />
<if label="No conversion?" condition="${ Pos + Neg == -4 }" >
<setVariable label="New ZDTo" name="ZDTo" value="${ ZDFrom }" version="2.0" />
<exitModule/>
</if>
<if label="New POS Number" condition="${ Pos ge 0 }" >
<setVariable label="New ZDTo" name="ZDTo" value="${ Replace( ZDFrom, CvtVar, Pos ) }" version="2.0" />
</if>
<if label="New NEG Number" condition="${ Neg ge 0 }" >
<setVariable label="New ZDTo" name="ZDTo" value="${ Replace( ZDFrom, CvtVar, Neg ) }" version="2.0" />
</if>
<print label="(Status) Conversion" version="1.0">
<![CDATA[
==============================================
Conversion was made...
ZDFrom: ${ ZDFrom }
ZDTo: ${ ZDTo }
==============================================
]]>
</print>
</module>
<variable name="ZDFrom" value="" description="Convert from Zone Decimal Value" />
<variable name="ZDTo" value="" description="Convert To Zoned Full Value" />
<variable name="PosNums" value="{ABCDEFGHI" description="Postive Numbers" />
<variable name="NegNums" value="}JKLMNOPQR" description="Netative Numbers" />
<variable name="Numbers" value="0123456789" description="The Numbers" />
</project>