IBM webMethods Hybrid Integration

IBM webMethods Hybrid Integration

Join this online group to communicate across IBM product users and experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.

 View Only
Expand all | Collapse all

Upgrade to EntireX Version 8 causes Error

  • 1.  Upgrade to EntireX Version 8 causes Error

    Posted Mon January 16, 2012 10:50 AM

    I used to be able to call a version 7.3.3 EntireX workbench generated dll from VB6 (DCOM). After generating the dll using EntireX version 8, I am unable to call the generated dll from VB6. The error I get is:

    This error is being caused by a parameter being defined as a string in VB6 and an N3 in the IDL from which the EntireX dll was generated. I am passing an empty string to the EntireX dll. When I pass a “0” instead of an empty string, there is no error. Note again, that this was not the case in version 7. The problem is that I have a few hundred dll’s where this might be a problem so changing my VB6 code is impractical. Is there a switch or setting available that will mimic the version 7 behaviour in version 8?


    #Mainframe-Integration
    #EntireX
    #webMethods


  • 2.  RE: Upgrade to EntireX Version 8 causes Error

    Posted Mon January 16, 2012 11:04 AM

    Did you rule out the Microsoft runtime being the source of the problem? see this for example:
    [url]c# - Convert String to Decimal Mystery - Stack Overflow
    Can you attach the VB source snippet and IDL?
    Shmuel Coller


    #webMethods
    #EntireX
    #Mainframe-Integration


  • 3.  RE: Upgrade to EntireX Version 8 causes Error

    Posted Tue January 17, 2012 04:06 AM

    I dont think that the link provided is relevant to my issue because I am using VB 6 and this is not an issue with EntireX v7. The IDL is :

    library 'Global':'Bracweb' is
    
    program 'BPE001N1':'StdCodesEnq' is define data parameter
    1 IP-USER-ID       	(A6)
    1 IP-RESOURCE-ID   	(A6)
    1 IP-FORM-NAME     	(A8)
    1 IP-ACTION        	(A1)
    1 IOP-SCROLL-DIR   	(A1)
    1 IOP-BOF          	(A1)
    1 IOP-EOF          	(A1)
    1 IOP-OCCURS       	(N3)
    1 IOP-CODE-TYPE	  	(A8)
    1 IOP-DISP-ORDER	(N3)
    1 IOP-DESC		  	(A32)
    1 IOP-CODE		  	(A8)
    1 OP-CODE-TYPE 	  	(A8/50) 	In Out
    1 OP-RESOURCE-ID	(A6/50)
    1 OP-DISP-ORDER		(N3/50)
    1 OP-DESC			(A32/50)
    1 OP-CODE			(A8/50)
    1 OP-DEFAULT		(A1/50)
    1 OP-ORIGINAL-CODE  (A8/50)
    1 OP-FIELD1         (A50/50)
    1 OP-FIELD2         (A50/50)
    1 OP-FIELD3         (A50/50)
    1 OP-FIELD4         (A50/50)
    1 OP-FIELD5         (A50/50)
    1 ERR-TYPE 			(A1/5) 	
    1 ERR-MESSAGE 		(A150/5) 	
    1 ERR-TAB 			(N2/5) 	
    1 ERR-PROGRAM 		(A8/5) 
    1 ERR-FIELD 		(A20/5) 	
    end-define

    and the VB 6 code is:

    Public Sub getCodes(Optional ipUserID As String = "", Optional ipResourceID As String = "", _
    Optional ipFormName As String = "BPE001N1", Optional ipAction As String = "", _
    Optional iopScrollDir As String = "", Optional iopBof As String = "", _
    Optional iopEOF As String = "", Optional iopOccurs As String = "", _
    Optional iopCodeType As String = "")
    
    Dim xmlNode                   As MSXML2.IXMLDOMElement
    Dim xmlAttrib                 As MSXML2.IXMLDOMAttribute
    
    Dim codetypeIN                As String * 8
    Dim iopDispOrder              As String
    Dim iopDesc                   As String * 32
    Dim IOPCODE                   As String * 8
    Dim OPEOF                     As String
    Dim opCodeType()              As String
    Dim OPRESOURCEID()            As String
    Dim opDispOrder()             As String
    Dim OPDESC()                  As String
    Dim OPCODE()                  As String
    Dim opDefault()               As String
    Dim OPORIGINALCODE()          As String
    Dim opField1()                As String
    Dim opField2()                As String
    Dim opField3()                As String
    Dim opField4()                As String
    Dim opField5()                As String
    'Errors
    Dim opErrorType()             As String
    Dim opErrorMessage()          As String
    Dim opErrorProgram()          As String
    Dim opErrorField()            As String
    Dim outDoc                    As MSXML2.DOMDocument40
    Dim menuObj                   As MSXML2.DOMDocument40
    Dim outXml                    As String
    'On Error GoTo errorHandle:
    Dim xmlGlobalNode             As MSXML2.IXMLDOMElement
    Dim xmlDatNode                As MSXML2.IXMLDOMElement
    Dim n                         As Long
    Dim oldType                   As String
    
    Set xmlNode = mvarXmlDom.selectSingleNode("//GLOBALS")
    codetypeIN = iopCodeType
    
    ReDim opCodeType(49) As String
    ReDim OPRESOURCEID(49) As String
    ReDim opDispOrder(49) As String
    ReDim OPDESC(49) As String
    ReDim OPCODE(49) As String
    ReDim opDefault(49) As String
    ReDim OPORIGINALCODE(49) As String
    'Errors.
    ReDim opErrorType(4) As String
    ReDim opErrorMessage(4) As String
    ReDim opErrorTab(4) As String
    ReDim opErrorProgram(4) As String
    ReDim opErrorField(4) As String
    ipUserID = ""
    ipResourceID = ""
    ipAction = ""
    
    mvarExObj.ServerAddress = commonXml.ConnectString("ENTXBRAC")
    
    
    mvarExObj.StdCodesEnq ipUserID, ipResourceID, ipFormName, ipAction, _
    iopScrollDir, iopBof, iopEOF, iopOccurs, _
    codetypeIN, iopDispOrder, iopDesc, IOPCODE, _
    opCodeType, OPRESOURCEID, opDispOrder, _
    OPDESC, OPCODE, opDefault, OPORIGINALCODE, _
    opField1, opField2, opField3, opField4, opField5, _
    opErrorType, opErrorMessage, opErrorTab, _
    opErrorProgram, opErrorField
    
    End Sub

    The line that causes the error is ‘mvarExObj.StdCodesEnq …’. This is the call to the EntireX generated dll. When the iopOccurs and iopDispOrder variables are changed from “” to “0”, the problem is resolved. Note that both these variables are defined as strings in VB 6 and that the IDL defines them as N3. Again, this works in EntireX version 7. So the problem seems to be that EntireX v8 does not tolerate blank strings for numeric variables.


    #EntireX
    #webMethods
    #Mainframe-Integration