We are having trouble when we try to use Natural sub-p’s with arrays. See the info cut and pasted below. We are getting a NAT6972. We have been advised by the Software AG person to use *Error-TA to return the “real” error.
We do not know what piece to attack first. We use many Natural sub-p’s in our production environment via the Broker TOR object and a few using RPC. This is our first with arrays and have similar ones waiting to be delivered.
I need guidance on using the *error-ta not sure where I need to reference it and guidance on how to properly format the arrays…so that we do not receive the NAT6972.
EntireX 7.1.1 patch level 30
Let me know if I need to provide any other information.
Smiles,
Karen
IDL
Library ‘XXXXX’ Is
Program ‘PRGNAME’ Is
Define Data Parameter
1 #W-USER-ID (A8)
1 #X-DAT (A30)
1 TEST-COUNT (N3) Out
1 TEST-DATA (/100)
2 TST-TY (A4)
2 TST-DT (A8)
2 SUBTEST (A2)
2 SEL-SUBTEST (A1)
2 TST-SCR (N4.2)
2 MAX-SCR (N4.2)
2 CRS-PLCMNTS (A10/1:4)
1 #RETURN-CODE (N4) Out
1 #RETURN-MSG (A60) Out
End-Define
CS Wrapper
#region Groups for LIBRARY ‘XXXXX’, PROGRAM ‘PRGNAME’
public class Prgname
{
public class TestData
{
[SendAs(IdlType.A, Length=4f)]public StringBuilder tstTy;
[SendAs(IdlType.A, Length=8f)]public StringBuilder tstDt;
[SendAs(IdlType.A, Length=2f)]public StringBuilder subtest;
[SendAs(IdlType.A, Length=1f)]public StringBuilder selSubtest;
[SendAs(IdlType.N, preDecimal=4, postDecimal=2)]public decimal tstScr;
[SendAs(IdlType.N, preDecimal=4, postDecimal=2)]public decimal maxScr;
[SendAs(IdlType.A, Length=10f, Dim=4f)]public StringBuilder crsPlcmnts;
}
}
#endregion
#region Method/Function for LIBRARY ‘ORIONWEB’ PROGRAM ‘STAW14N1’
[Program(“STAW14N1”)]
public void testScores(
[SendAs(IdlType.A, Length=8f)][In, Out] ref StringBuilder wUserId,
[SendAs(IdlType.A, Length=30f)][In, Out] ref StringBuilder xDat,
[SendAs(IdlType.N, preDecimal=3, postDecimal=0)][Out] out decimal testCount,
[SendAs(IdlType.Group, Dim=100f)][In, Out] ref EntireX.Wrappers.Student.StudentBasics.Staw14n1.TestData testData,
[SendAs(IdlType.N, preDecimal=4, postDecimal=0)][Out] out decimal returnCode,
[SendAs(IdlType.A, Length=60f)][Out] out StringBuilder returnMsg
)
{
testCount = 0;
returnCode = 0;
returnMsg = new StringBuilder() ;
service.Send(
this.GetType().GetMethod(“TestScores”),
wUserId,
xDat,
new Ref(ref testCount),
testData,
new Ref(ref returnCode),
returnMsg
);
}
#endregion
}
}
Karen Goolishian Luttrell
Artemis Development Team
FCCJ
Karen Goolishian Luttrell
Artemis Development Team
FCCJ
a NAT6972 is usually a setup problem rather than something within your program. Turn on the trace:
RPC=(SERVER=ON,etc,TRACE=1)
and add a DD statement for CMPRT10:
//CMPRT10 DD SYSOUT=*
This will give the subcode of the error, one of:
1 - No directory.
2 - Invalid directory.
3 - No space to load directory. Increase the RPC size.
4 - No server found in service directory for the subprogram/library
whose names are indicated in the error message.
5 - Recursive RPC with the two subprograms whose names are
indicated in the error message.
6 - A Natural error has occurred during loading of NATCLTGS.
Given that you have some arrays in your PDA, I’m guessing you might need to increase your RPCSIZE value. The minimum for RPCSIZE is MAXBUFF + 4. Try MAXBUFF + 16. For example:
RPC=(SERVER=ON,SRVNODE=ETB001,SRVNAME=SRV1,
MAXBUFF=30,RPCSIZE=46)
Douglas Kelly,
Principal Consultant
Software AG, Inc
Sacramento, California