內文這個東西就像長篇大論的描述,跟在WORD裡面一樣可以輸入無數個字。如果在sap中輸入事務碼進去可以維護多少個字都可以,但是如果是用.NET調用BAPI傳進去內文的話,會將內文超過132個字元的內容全部截掉。要怎麼樣才能全部匯入所有內文呢?
以下以匯入請購單的程式來描述:
//表頭內文 轉換多筆實現超長文本插入
......
PRHEADERTEXT.Insert(); // 這個是BAPI裡面匯入內文的參數
if (txtQG07.Text.Trim().Length > 120) // txtQG07.Text的內容就是所有內文,這裡用120個字元判斷
{
int len = txtQG07.Text.Trim().Length / 120; // 這裡len取整數
len = len + 1; // 可能有結餘,故加一
for (int q = 0; q < len; q++)
{
if (q + 1 == len) // 如果到了最後一行,則去最後一行之後的所有內文
PRHEADERTEXT.CurrentRow.SetValue("TEXT_LINE", txtQG07.Text.Trim().Substring(q * 120));
else
PRHEADERTEXT.CurrentRow.SetValue("TEXT_LINE", txtQG07.Text.Trim().Substring(q * 120, 120));
PRHEADERTEXT.Append(); // 將截取的每一段內容都附加到內文後面。如果不加這一句,則文本會倒置
}
}
else
{
PRHEADERTEXT.CurrentRow.SetValue("TEXT_LINE", txtQG07.Text.Trim());
}
......
如此則可以將內文全部匯入。但如果是項目中的內文呢?因為會涉及到傳入項目序號,所以需要稍作處理:
//項目內文
PRITEMTEXT.Insert();
if (ds.Tables[0].Rows[i]["QGA11"].ToString().Trim().Length > 120)
{
int len = ds.Tables[0].Rows[i]["QGA11"].ToString().Trim().Length / 120;
len = len + 1;
for (int q = 0; q < len; q++)
{
PRITEMTEXT.CurrentRow.SetValue("PREQ_ITEM", j.ToString()); // 將額外需要的參數都添加到這裡,每迴圈一次都要SetValue一次
if (q + 1 == len)
PRITEMTEXT.CurrentRow.SetValue("TEXT_LINE", ds.Tables[0].Rows[i]["QGA11"].ToString().Trim().Substring(q * 120));
else
PRITEMTEXT.CurrentRow.SetValue("TEXT_LINE", ds.Tables[0].Rows[i]["QGA11"].ToString().Trim().Substring(q * 120, 120));
PRITEMTEXT.Append();
}
}
else
{
PRITEMTEXT.CurrentRow.SetValue("PREQ_ITEM", j.ToString());
PRITEMTEXT.CurrentRow.SetValue("TEXT_LINE", ds.Tables[0].Rows[i]["QGA11"].ToString());
}