2011年10月26日 星期三

SAP: Destination configuration already initialized - Part II

這個範例主要用來解決兩件事情:

1. 避免 Destination configuration already initialized 錯誤
2. 展示如何把 IRfcTable 當作呼叫 RFC 的輸入參數

歷經浪費非常多天的 try and error,有需要的請服用。

public IRfcTable TEST_B0001(string VBELN, string POSNR, string CHARG, string LFIMG)
{
        IRfcTable IRetTable = null;
        HLBackendConfig hlConfig = new HLBackendConfig();
        
        bool bRegistered = false;
        
        try
        {
            RfcDestinationManager.RegisterDestinationConfiguration(hlConfig);
            RfcDestination rfcDest = RfcDestinationManager.GetDestination("INIT_SAP");
            RfcRepository rfcRepo = rfcDest.Repository;
            IRfcFunction IReader = rfcRepo.CreateFunction("TEST_B0001");
        
            bRegistered = true;
        
            IRfcTable Itab = IReader.GetTable("IT_INPUT");

            Itab.Append();
        
            Itab[0].SetValue("VBELN", VBELN);
            Itab[0].SetValue("POSNR", POSNR);
            Itab[0].SetValue("CHARG", CHARG);
            Itab[0].SetValue("LFIMG", LFIMG);
        
            IReader.SetValue("IT_INPUT", Itab);
        
            IReader.Invoke(rfcDest);
            
            IRetTable = IReader.GetTable("ET_RETURN");
        }
        catch (Exception ex)
            {
            throw ex;
        }
        finally
        {
            if (bRegistered)
                RfcDestinationManager.UnregisterDestinationConfiguration(hlConfig);
        }
        
        return IRetTable;
}

沒有留言: