Quantcast
Channel: Sage 100
Viewing all articles
Browse latest Browse all 36990

Forum Post: BOI and ACS's Multi-Bin Distributions

$
0
0
Has anyone had any luck with BOI and ACS’s Multi-Bin components? The latest version from ACS indicates BOI access to Multi-Bin distribution elements should be possible. But, working with their demos to create the C# version below (I know, few are using C# and BOI, but the processes should be similar enough to VB) I get a return of 0 on the nSetMultiBinObject() with last error msg = “Setup indicates that this option is not available on your system.” First, we did check that “Allow external access” is enabled. And as a test, we modified the quantity ordered on a test order, everything was just fine. And, I can manually (Via Sales Order Entry) create Multi-Bin distributions on the sales order, for this line item. Unfortunately, the response from ACS is that they do not have BOI experience to be able to provide answers. private bool Add_SO_MB_Distribution(string p_SalesOrderNo, string p_LineKey, string p_BinLocation, int p_NewQty) {     object retVal;     string MethodName = string.Empty;     object[] Parameters;     string errorMsg = string.Empty;                 int TaskID = (int)oSS.InvokeMethod("nLookupTask", "SO_SalesOrder_ui");     retVal = oSS.InvokeMethod("nSetProgram", TaskID);     using (DispatchObject SO_SalesOrderHeader = new DispatchObject(pvx.InvokeMethod("NewObject", "SO_SalesOrder_bus", oSS.GetObject())))     {         Parameters = new object[] { "SalesOrderNo$", p_SalesOrderNo };         MethodName = "nSetKeyValue";         retVal = SO_SalesOrderHeader.InvokeMethodByRef(MethodName, Parameters);         if (retVal.ToString() == "0")         {             DisplayError(SO_SalesOrderHeader, retVal, MethodName, Parameters);             return false;         }         Parameters = new object[] { "" };         MethodName = "nSetKey";         retVal = SO_SalesOrderHeader.InvokeMethod(MethodName);         if (retVal.ToString() == "0")         {             DisplayError(SO_SalesOrderHeader, retVal, MethodName, Parameters);             return false;         }         Parameters = new object[] { "CustomerPONo$", "" };         MethodName = "nGetValue";         retVal = SO_SalesOrderHeader.InvokeMethodByRef(MethodName, Parameters);         if (retVal.ToString() != "1")         {             DisplayError(SO_SalesOrderHeader, retVal, MethodName, Parameters);             return false;         }         else         {             // Testing only to ensure we have the correct Sales order             MessageBox.Show("CustomerPONo = " + Parameters[1].ToString());         }                                        using (DispatchObject SO_SalesOrderLines = new DispatchObject(SO_SalesOrderHeader.GetProperty("oLines")))         {             Parameters = new object[] { p_LineKey };             MethodName = "sGetEditKey";             object FullKey = SO_SalesOrderLines.InvokeMethod(MethodName, Parameters);             if (FullKey.ToString() == "0")             {                 DisplayError(SO_SalesOrderLines, FullKey, MethodName, Parameters);                 return false;             }                                 Parameters = new object[] { FullKey };             MethodName = "nEditLine";             retVal = SO_SalesOrderLines.InvokeMethodByRef(MethodName, Parameters);             if (retVal.ToString() == "0")             {                 DisplayError(SO_SalesOrderLines, retVal, MethodName, Parameters);                 return false;             }             if (retVal.ToString() == "2")             {                 MessageBox.Show("Creating new Line object");                 // Fail, as we should not be creating new lines                 return false;             }                                                     Parameters = new object[] { "" };             MethodName = "nSetMultiBinObject";             //retVal = SO_SalesOrderLines.InvokeMethodByRef(MethodName, Parameters);             retVal = SO_SalesOrderLines.InvokeMethod(MethodName);             if (retVal.ToString() != "1")             {                 DisplayError(SO_SalesOrderLines, retVal, MethodName, Parameters);                 return false;             }                                 using (DispatchObject SO_SalesOrderMB = new DispatchObject(SO_SalesOrderLines.GetProperty("oACS_MultiBin_Obj")))             {                 // From ACS Multi-Bin_Manual                 // adVal=DistObj'AddDistributionLine(LotSerialNo$,FromBinLoc$,ToBinLoc$,"",PalID$)                 Parameters = new object[] { "", p_BinLocation, "", "", "" };                 MethodName = "nAddDistributionLine";                 retVal = SO_SalesOrderMB.InvokeMethodByRef(MethodName, Parameters);                 if (retVal.ToString() == "0")                 {                     DisplayError(SO_SalesOrderMB, retVal, MethodName, Parameters);                     return false;                 }                 if (retVal.ToString() == "2") // Creating new Distribution Object                 {                     Parameters = new object[] { "QuantityOrdered", p_NewQty };                     MethodName = "nSetValue";                     retVal = SO_SalesOrderMB.InvokeMethodByRef(MethodName, Parameters);                     if (retVal.ToString() == "0")                     {                         DisplayError(SO_SalesOrderMB, retVal, MethodName, Parameters);                         return false;                     }                 }                 if (retVal.ToString() == "1") // Editing existing Distribution Object                 {                     int existingQty = 0;                     Parameters = new object[] { "QuantityOrdered", existingQty };                     MethodName = "nGetValue";                     retVal = SO_SalesOrderMB.InvokeMethodByRef(MethodName, Parameters);                     if (retVal.ToString() == "0")                     {                         DisplayError(SO_SalesOrderMB, retVal, MethodName, Parameters);                         return false;                     }                     existingQty += p_NewQty;                     Parameters = new object[] { "QuantityOrdered", existingQty };                     MethodName = "nSetValue";                     retVal = SO_SalesOrderMB.InvokeMethodByRef(MethodName, Parameters);                     if (retVal.ToString() == "0")                     {                         DisplayError(SO_SalesOrderMB, retVal, MethodName, Parameters);                         return false;                     }                 }                 Parameters = new object[] { "" };                 MethodName = "nWrite";                 retVal = SO_SalesOrderMB.InvokeMethod(MethodName, Parameters);                 if (retVal.ToString() == "0")                 {                     DisplayError(SO_SalesOrderMB, retVal, MethodName, Parameters);                     return false;                 }                 Parameters = new object[] { "" };                 MethodName = "nCommitDistributionRows";                 retVal = SO_SalesOrderMB.InvokeMethod(MethodName, Parameters);                 if (retVal.ToString() == "0")                 {                     DisplayError(SO_SalesOrderMB, retVal, MethodName, Parameters);                     return false;                 }             }             Parameters = new object[] { "" };             MethodName = "nWrite";             retVal = SO_SalesOrderLines.InvokeMethod(MethodName, Parameters);             if (retVal.ToString() == "0")             {                 DisplayError(SO_SalesOrderLines, retVal, MethodName, Parameters);                 return false;             }         }         Parameters = new object[] { "" };         MethodName = "nWrite";         retVal = SO_SalesOrderHeader.InvokeMethod(MethodName, Parameters);         if (retVal.ToString() == "0")         {             DisplayError(SO_SalesOrderHeader, retVal, MethodName, Parameters);             return false;         }     }     return true; } Has anyone had any luck with BOI and ACS’s Multi-Bin components? The latest version from ACS indicates BOI access to Multi-Bin distribution elements should be possible. But, working with their demos to create the C# version below (I know, few are using C# and BOI, but the processes should be similar enough to VB) I get a return of 0 on the nSetMultiBinObject() with last error msg = “Setup indicates that this option is not available on your system.” First, we did check that “Allow external access” is enabled. And as a test, we modified the quantity ordered on a test order, everything was just fine. And, I can manually (Via Sales Order Entry) create Multi-Bin distributions on the sales order, for this line item.   Unfortunately, the response from ACS is that they do not have BOI experience to be able to provide answers.   private bool Add_SO_MB_Distribution ( string p_SalesOrderNo , string p_LineKey , string p_BinLocation , int p_NewQty )         {             object retVal ;             string MethodName = string . Empty ;             object [] Parameters ;             string errorMsg = string . Empty ;                         int TaskID = ( int ) oSS . InvokeMethod ( "nLookupTask" , "SO_SalesOrder_ui" );             retVal = oSS . InvokeMethod ( "nSetProgram" , TaskID );               using ( DispatchObject SO_SalesOrderHeader = new DispatchObject ( pvx . InvokeMethod ( "NewObject" , "SO_SalesOrder_bus" , oSS . GetObject ())))             {                 Parameters = new object [] { "SalesOrderNo$" , p_SalesOrderNo };                 MethodName = "nSetKeyValue" ;                 retVal = SO_SalesOrderHeader . InvokeMethodByRef ( MethodName , Parameters );                 if ( retVal . ToString () == "0" )                 {                     DisplayError ( SO_SalesOrderHeader , retVal , MethodName , Parameters );                     return false ;                 }                    Parameters = new object [] { "" };                 MethodName = "nSetKey" ;                 retVal = SO_SalesOrderHeader . InvokeMethod ( MethodName );                 if ( retVal . ToString () == "0" )                 {                     DisplayError ( SO_SalesOrderHeader , retVal , MethodName , Parameters );                     return false ;                 }                   Parameters = new object [] { "CustomerPONo$" , "" };                 MethodName = "nGetValue" ;                 retVal = SO_SalesOrderHeader . InvokeMethodByRef ( MethodName , Parameters );                 if ( retVal . ToString () != "1" )                 {                     DisplayError ( SO_SalesOrderHeader , retVal , MethodName , Parameters );                     return false ;                 }                 else                 {                     // Testing only to ensure we have the correct Sales order                     MessageBox . Show ( "CustomerPONo = " + Parameters [1]. ToString ());                 }                                                using ( DispatchObject SO_SalesOrderLines = new DispatchObject ( SO_SalesOrderHeader . GetProperty ( "oLines" )))                 {                     Parameters = new object [] { p_LineKey };                     MethodName = "sGetEditKey" ;                     object FullKey = SO_SalesOrderLines . InvokeMethod ( MethodName , Parameters );                     if ( FullKey . ToString () == "0" )                     {                         DisplayError ( SO_SalesOrderLines , FullKey , MethodName , Parameters );                         return false ;                     }                                         Parameters = new object [] { FullKey };                     MethodName = "nEditLine" ;                     retVal = SO_SalesOrderLines . InvokeMethodByRef ( MethodName , Parameters );                     if ( retVal . ToString () == "0" )                     {                         DisplayError ( SO_SalesOrderLines , retVal , MethodName , Parameters );                         return false ;                     }                     if ( retVal . ToString () == "2" )                     {                         MessageBox . Show ( "Creating new Line object" );                         // Fail, as we should not be creating new lines                         return false ;                     }                                                             Parameters = new object [] { "" };                     MethodName = "nSetMultiBinObject" ;                     //retVal = SO_SalesOrderLines.InvokeMethodByRef(MethodName, Parameters);                     retVal = SO_SalesOrderLines . InvokeMethod ( MethodName );                     if ( retVal . ToString () != "1" )                     {                         DisplayError ( SO_SalesOrderLines , retVal , MethodName , Parameters );                         return false ;                     }                                         using ( DispatchObject SO_SalesOrderMB = new DispatchObject ( SO_SalesOrderLines . GetProperty ( "oACS_MultiBin_Obj" )))                     {                         // From ACS Multi-Bin_Manual                         // adVal=DistObj'AddDistributionLine(LotSerialNo$,FromBinLoc$,ToBinLoc$,"",PalID$)                         Parameters = new object [] { "" , p_BinLocation , "" , "" , "" };                         MethodName = "nAddDistributionLine" ;                         retVal = SO_SalesOrderMB . InvokeMethodByRef ( MethodName , Parameters );                         if ( retVal . ToString () == "0" )                         {                             DisplayError ( SO_SalesOrderMB , retVal , MethodName , Parameters );                             return false ;                         }                           if ( retVal . ToString () == "2" ) // Creating new Distribution Object                         {                             Parameters = new object [] { "QuantityOrdered" , p_NewQty };                             MethodName = "nSetValue" ;                             retVal = SO_SalesOrderMB . InvokeMethodByRef ( MethodName , Parameters );                             if ( retVal . ToString () == "0" )                             {                                 DisplayError ( SO_SalesOrderMB , retVal , MethodName , Parameters );                                 return false ;                             }                         }                           if ( retVal . ToString () == "1" ) // Editing existing Distribution Object                         {                             int existingQty = 0;                             Parameters = new object [] { "QuantityOrdered" , existingQty };                             MethodName = "nGetValue" ;                             retVal = SO_SalesOrderMB . InvokeMethodByRef ( MethodName , Parameters );                             if ( retVal . ToString () == "0" )                             {                                 DisplayError ( SO_SalesOrderMB , retVal , MethodName , Parameters );                                 return false ;                             }                             existingQty += p_NewQty ;                               Parameters = new object [] { "QuantityOrdered" , existingQty };                             MethodName = "nSetValue" ;                             retVal = SO_SalesOrderMB . InvokeMethodByRef ( MethodName , Parameters );                             if ( retVal . ToString () == "0" )                             {                                 DisplayError ( SO_SalesOrderMB , retVal , MethodName , Parameters );                                 return false ;                             }                         }                         Parameters = new object [] { "" };                         MethodName = "nWrite" ;                         retVal = SO_SalesOrderMB . InvokeMethod ( MethodName , Parameters );                          if ( retVal . ToString () == "0" )                         {                             DisplayError ( SO_SalesOrderMB , retVal , MethodName , Parameters );                             return false ;                         }                           Parameters = new object [] { "" };                         MethodName = "nCommitDistributionRows" ;                         retVal = SO_SalesOrderMB . InvokeMethod ( MethodName , Parameters );                         if ( retVal . ToString () == "0" )                          {                             DisplayError ( SO_SalesOrderMB , retVal , MethodName , Parameters );                             return false ;                         }                     }                       Parameters = new object [] { "" };                     MethodName = "nWrite" ;                     retVal = SO_SalesOrderLines . InvokeMethod ( MethodName , Parameters );                     if ( retVal . ToString () == "0" )                     {                         DisplayError ( SO_SalesOrderLines , retVal , MethodName , Parameters );                         return false ;                     }                 }                   Parameters = new object [] { "" };                 MethodName = "nWrite" ;                 retVal = SO_SalesOrderHeader . InvokeMethod ( MethodName , Parameters );                 if ( retVal . ToString () == "0" )                 {                     DisplayError ( SO_SalesOrderHeader , retVal , MethodName , Parameters );                     return false ;                 }             }              return true ;         }  

Viewing all articles
Browse latest Browse all 36990

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>