This sample shows how to change a production order using the function module CLOI_CHANGES_UPL_31.
About #
This sample can be used to send changes to SAP if an external program does the planning of the productions orders.
To change the header data you need the production order number and the field name you are going to change. For a complete list of all fields, refer to the SAP Documentation: Function Module CLOI_CHANGES_UPL_31
Typical applications include:
- changing the start date (Field GSTRP)
- changing the end date (Field GLTRP)
- changing the quantity (Field BDMNG)
- changing the start time (Field GSUZP)
- rescheduling the production order using the field METHOD with the value “SCHEDULE”
The table CLOI_MESSAGE_LOG_EXP contains the message codes of the function module.
Call CLOI_CHANGES_UPL_31 #
Change Start and End Date
The following sample code changes the start date (Field GSTRP) and the end date (Field GLTRP) of a production order.
public static string ChangeProductionOrder(string AUFNR, string VORNR, string APLFL)
{
string rMessage = "";
RFCFunction func = connection.CreateFunction("CLOI_CHANGES_UPL_31");
func.Exports["CLOI_IF_PAR"].ToStructure()["COMMITFLG"] = "C";
func.Exports["CLOI_IF_PAR"].ToStructure()["R3_VERSION"] = "60"; //SAP Version
func.Exports["CLOI_IF_PAR"].ToStructure()["MSG_FILTER"] = ""; // Show All Messages
func.Exports["CLOI_IF_PAR"].ToStructure()["MSGLOG_REQ"] = "X"; //Message Return Tables
func.Exports["CLOI_IF_PAR"].ToStructure()["MSGOBJ_REQ"] = "X";
func.Exports["CLOI_IF_PAR"].ToStructure()["ORD_REQ"] = "X";
func.Exports["CLOI_IF_PAR"].ToStructure()["ORDOPR_REQ"] = "X";
func.Exports["CLOI_IF_PAR"].ToStructure()["METLOG_REQ"] = "X";
func.Exports["CLOI_IF_PAR"].ToStructure()["ORDSEQ_REQ"] = "X";
// Change Header Data
// Change Start Time
RFCStructure orduRow = func.Tables["CLOI_ORDU_IMP"].Rows.Add();
orduRow["AUFNR"] = AUFNR;
orduRow["FIELD"] = "GSTRP";
orduRow["VALUE"] = "20080815";
//Change Finish Time
orduRow = func.Tables["CLOI_ORDU_IMP"].Rows.Add();
orduRow["AUFNR"] = AUFNR;
orduRow["FIELD"] = "GLTRP";
orduRow["VALUE"] = "20080815";
orduRow = func.Tables["CLOI_ORDU_IMP"].Rows.Add();
orduRow["AUFNR"] = AUFNR;
orduRow["FIELD"] = "METHOD";
orduRow["VALUE"] = "SCHEDULE";
func.Execute();
if (func.Tables["CLOI_MESSAGE_LOG_EXP"].RowCount > 0)
{
RFCStructure MyMessageRow = func.Tables["CLOI_MESSAGE_LOG_EXP"].Rows[0];
rMessage = "MessageType: " + MyMessageRow[3].ToString() +
" Message (Please Check SE91): " + MyMessageRow[1].ToString() + " - " +
MyMessageRow[2].ToString();
}
else
{
rMessage = "No Messages found";
}
return rMessage;
}
Reschedule All Item Data
The following sample code changes the item data of a production order. It changes the start and end dates of a given operation defined in the variable VORNR.
To reschedule all the item data of the production order the value of the field METHOD is set to “DISPATCH”.
public static string ChangeProductionOrderPos(string AUFNR, string VORNR, string APLFL)
{
string rMessage = "";
RFCFunction func = connection.CreateFunction("CLOI_CHANGES_UPL_31");
func.Exports["CLOI_IF_PAR"].ToStructure()["COMMITFLG"] = "C";
func.Exports["CLOI_IF_PAR"].ToStructure()["R3_VERSION"] = "60"; //SAP Version
func.Exports["CLOI_IF_PAR"].ToStructure()["MSG_FILTER"] = ""; // Show All Messages
func.Exports["CLOI_IF_PAR"].ToStructure()["MSGLOG_REQ"] = "X"; //Message Return Tables
func.Exports["CLOI_IF_PAR"].ToStructure()["MSGOBJ_REQ"] = "X";
func.Exports["CLOI_IF_PAR"].ToStructure()["ORD_REQ"] = "X";
func.Exports["CLOI_IF_PAR"].ToStructure()["ORDOPR_REQ"] = "X";
func.Exports["CLOI_IF_PAR"].ToStructure()["METLOG_REQ"] = "X";
func.Exports["CLOI_IF_PAR"].ToStructure()["ORDSEQ_REQ"] = "X";
// Change Position Data
RFCStructure opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
// Changes the work center
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "ARBPL";
opruRow["VALUE"] = "1112"; // Note : The internal ID of workcenter
//Earliest date when execution of operation can finish
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "FSEDD";
opruRow["VALUE"] = "20080812";
//Earliest time when execution of operation can finish
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "FSEDZ";
opruRow["VALUE"] = "080000";
//Earliest date when execution of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "FSAVD";
opruRow["VALUE"] = "20080812";
//Earliest time when execution of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "FSAVZ";
opruRow["VALUE"] = "080000";
//Earliest date when processing of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "FSSBD";
opruRow["VALUE"] = "20080812";
//Earliest time when processing of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "FSSBZ";
opruRow["VALUE"] = "080000";
//Earliest date when teardown of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "FSSAD";
opruRow["VALUE"] = "20080812";
//Earliest time when teardown of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "FSSAZ";
opruRow["VALUE"] = "080000";
//Latest date when execution of operation can finish
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "SSEDD";
opruRow["VALUE"] = "20080813";
//Latest time when execution of operation can finish
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "SSEDZ";
opruRow["VALUE"] = "100000";
//Latest date when execution of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "SSAVD";
opruRow["VALUE"] = "20080813";
//Latest time when execution of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "SSAVZ";
opruRow["VALUE"] = "100000";
//Latest date when teardown of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "SSSAD";
opruRow["VALUE"] = "20080813";
//Latest time when teardown of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "SSSAZ";
opruRow["VALUE"] = "100000";
//Latest date when processing of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "SSSBD";
opruRow["VALUE"] = "20080813";
//Latest time when processing of operation can start
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "SSSBZ";
opruRow["VALUE"] = "100000";
//Dispatches the Order.
opruRow = func.Tables["CLOI_ORD_OPRU_IMP"].Rows.Add();
opruRow["AUFNR"] = AUFNR;
opruRow["VORNR"] = VORNR;
opruRow["APLFL"] = APLFL;
opruRow["FIELD"] = "METHOD";
opruRow["VALUE"] = "DISPATCH";
func.Execute();
if (func.Tables["CLOI_MESSAGE_LOG_EXP"].RowCount > 0)
{
RFCStructure MyMessageRow = func.Tables["CLOI_MESSAGE_LOG_EXP"].Rows[0];
rMessage = "MessageType: " + MyMessageRow[3].ToString() +
" Message (Please Check SE91): " + MyMessageRow[1].ToString() + " - " +
MyMessageRow[2].ToString();
}
return rMessage;
}
Output:
Tipp: Use SAP transaction SE91 to look up all message codes. The Messagecode C7 - 071 means “Operation has been scheduled”.