共用方式為


Send_Data (CPI-C)

Send_Data呼叫 (函式名稱 cmsend) 會將資料放入本機邏輯單元 (LU) 的傳送緩衝區,以傳輸至夥伴計劃。

語法

  
CM_ENTRY Send_Data(   
  unsigned char FAR *conversation_ID,    
  unsigned char FAR *buffer,             
    CM_INT32 FAR *send_length,             
    CM_INT32 FAR *request_to_send_received,    
    CM_INT32 FAR *return_code              
);  

參數

conversation_ID
提供的參數。 指定交談的標識碼。 此參數的值是由 Initialize_ConversationAccept_Conversation 所傳回。

緩衝區
提供的參數。 指定緩衝區的位址,其中包含要放入本機 RU 傳送緩衝區中的數據。

send_length
提供的參數。 指定要放入本機 RU 傳送緩衝區的數據位元組數目。 範圍是從 0 到 32767。

對於對應的交談,如果 send_length 設為零,則會將 Null 數據記錄傳送至合作夥伴計劃。

對於基本交談,如果 send_length 設定為零,則不會傳送任何數據。 緩衝區參數不相關。 不過,會處理其他參數。

request_to_send_received
傳回的參數。 這是要求到傳送接收的指標。 可能的值為:

CM_REQ_TO_SEND_RECEIVED
合作夥伴計劃發出 Request_To_Send 呼叫,要求本機程式將交談變更為 RECEIVE 狀態。

CM_REQ_TO_SEND_NOT_RECEIVED
合作夥伴計劃未發出 Request_To_Send 通話。 如果return_code設定為 CM_PROGRAM_PARAMETER_CHECK 或 CM_PROGRAM_STATE_CHECK,則此值不相關。

return_code
從這個呼叫傳回的程序代碼。 本主題稍後會列出有效的傳回碼。

回傳代碼

CM_OK
主要傳回碼;已成功執行的呼叫。

CM_OPERATION_NOT_ACCEPTED
主要傳回碼;此交談的上一個作業不完整。

CM_OPERATION_INCOMPLETE
主要傳回碼;作業尚未完成(處理模式僅限非封鎖),仍在進行中。 程式可以發出 Wait_For_Conversation 等候作業完成,或 Cancel_Conversation 取消作業和交談。 如果已呼叫 Specify_Windows_Handle ,應用程式應該等候Microsoft® Windows® 訊息的通知,而不是呼叫 Wait_For_Conversation

CM_PROGRAM_PARAMETER_CHECK
主要傳回碼;發生下列其中一項:

  • conversation_ID指定的值無效。

  • send_length指定的值超出範圍(大於32767)。

  • 這是基本的交談,而前兩個字節的 緩衝區 包含無效的邏輯記錄長度(0x0000、0x0001、0x8000或0x8001)。

    CM_PROGRAM_STATE_CHECK
    主要傳回碼;發生下列其中一項:

  • 交談狀態不是 SEND 或 SEND_PENDING。

  • 基本交談處於 SEND 狀態, 且send_type 設定為 [CM_SEND_AND_CONFIRM]、[CM_SEND_AND_DEALLOCATE] 或 [CM_SEND_AND_PREP_TO_RECEIVE]。 不過,數據不會在邏輯記錄界限上結束。 只有當deallocate_type設定為 CM_DEALLOCATE_ABEND且send_type 設定為 CM_SEND_AND_DEALLOCATE 時,才允許此條件。

    CM_PRODUCT_SPECIFIC_ERROR
    主要傳回碼;發生產品特定的錯誤,且已在產品錯誤記錄檔中記錄。

    CM_CONVERSATION_TYPE_MISMATCH
    主要傳回碼;夥伴 LU 或程式不支援配置要求中指定的交談類型(基本或對應)。

    CM_PIP_NOT_SPECIFIED_CORRECTLY
    主要傳回碼;配置要求遭到非CPI-C LU 6.2 交易程式 (TP) 拒絕。 合作夥伴計劃需要一或多個 PIP 資料變數,而 CPI-C 不支援這些變數。

    CM_SECURITY_NOT_VALID
    主要傳回碼;合作夥伴 LU 不接受配置要求中指定的使用者識別碼或密碼。

    CM_SYNC_LEVEL_NOT_SUPPORTED_PGM
    主要傳回碼;合作夥伴計劃不支援配置要求中指定的同步處理層級。

    CM_TPN_NOT_RECOGNIZED
    主要傳回碼;夥伴 LU 無法辨識配置要求中指定的程式名稱。

    CM_TP_NOT_AVAILABLE_NO_RETRY
    主要傳回碼;夥伴 LU 無法啟動配置要求中指定的程式,因為有永久條件。 錯誤的原因可能會記錄在遠端節點上。 在更正錯誤之前,請勿重試配置。

    CM_TP_NOT_AVAILABLE_RETRY
    主要傳回碼;夥伴 LU 無法啟動配置要求中指定的程式,因為暫時性條件。 錯誤的原因可能會記錄在遠端節點上。 重試配置。

    CM_PROGRAM_ERROR_PURGING
    主要傳回碼;發生下列其中一項:

  • 處於 RECEIVE 或 CONFIRM 狀態時,合作夥伴計畫會發出 Send_Error。 已清除已傳送但尚未接收的數據。

  • 雖然處於SEND_PENDING狀態,且錯誤方向設定為 CM_RECEIVE_ERROR,但合作夥伴計劃會發出 Send_Error。 數據未清除。

    CM_RESOURCE_FAILURE_NO_RETRY
    主要傳回碼;發生下列其中一項:

  • 交談因為永久狀況而過早終止。 在更正錯誤之前,請勿重試。

  • 合作夥伴計劃未在正常終止之前解除分配交談。

    CM_RESOURCE_FAILURE_RETRY
    主要傳回碼;交談因暫時性狀況而過早終止,例如數據機失敗。 重試交談。

    CM_DEALLOCATED_ABEND
    主要傳回碼;交談已解除分配,原因如下:

  • 遠端程序發出 Deallocate ,並將 type 參數設定為 CM_DEALLOCATE_ABEND,或遠端 LU 因為遠端程式異常結束狀況而這樣做。 如果遠端程式的交談在發出呼叫時處於 RECEIVE 狀態,則會清除本機程式所傳送且尚未由遠端程式接收的資訊。

  • 遠端 TP 已正常終止,但在終止之前未解除分配交談。 遠端 LU 上的節點服務會代表遠端 TP 解除分配交談。

    CM_DEALLOCATED_ABEND_SVC
    主要傳回碼;交談已解除分配,原因如下:

  • 合作夥伴計劃發出 Deallocate ,並將 type 參數設定為 ABEND_SVC。

  • 合作夥伴計劃未在終止之前解除分配交談。

    如果此呼叫是由本機程式發出時,夥伴計劃的交談處於 RECEIVE 狀態,則會清除由本機程式傳送且尚未由合作夥伴計劃接收的數據。

    CM_DEALLOCATED_ABEND_TIMER
    主要傳回碼;交談已解除分配,因為合作夥伴計劃已發出 Deallocate ,並將 type 參數設定為 ABEND_TIMER。 如果此呼叫是由本機程式發出時,夥伴計劃的交談處於 RECEIVE 狀態,則會清除由本機程式傳送且尚未由合作夥伴計劃接收的數據。

    CM_SVC_ERROR_PURGING
    主要傳回碼;處於 SEND 狀態時,合作夥伴計畫或合作夥伴 LU 會發出 Send_Error ,並將 type 參數設定為 SVC。 傳送給合作夥伴計劃的數據可能已經清除。

    狀態變更

    當程式發出此呼叫時,交談必須處於 SEND 或SEND_PENDING狀態。

    下表摘要說明 當return_code 設定為 CM_OK 時,可能的狀態變更。

send_type 舊狀態 新狀態
CM_BUFFER_DATA 發送 沒有變化
CM_BUFFER_DATA SEND_PENDING 發送
CM_SEND_AND_FLUSH 發送 沒有變化
CM_SEND_AND_FLUSH SEND_PENDING 發送
CM_SEND_AND_CONFIRM 發送 沒有變化
CM_SEND_AND_CONFIRM SEND_PENDING 發送
CM_SEND_AND_PREP_TO_ RECEIVE 無法提供 收到
CM_SEND_AND_DEALLOCATE 無法提供 重置

對於CM_PROGRAM_ERROR_PURGING或CM_SVC_ERROR_PURGING的 return_code 值,交談會變更為 RECEIVE 狀態。 對於其他非CM_OK值,交談會變更為 RESET 狀態。

備註

當發生下列其中一項時,本機 LU 傳送緩衝區中收集的數據會傳輸至夥伴 LU 和合作夥伴計劃:

  • 傳送緩衝區會填滿。

  • 本機程式會發出 FlushConfirmDeallocate 呼叫或其他排清 RU 傳送緩衝區的呼叫。 (某些傳送類型,由 Set_Send_Type設定,包括排清功能。

    要傳送的資料可以是:

  • 對應交談上的完整數據記錄。 完整的數據記錄是 send_length 參數所指定的長度字串。

  • 基本交談的完整邏輯記錄或部分。 完整的邏輯記錄是由 LL 值所決定。 (一個邏輯記錄可以結束,一個新的記錄會在要傳送的數據字串中間開始。

    LU 不會在要傳送的數據字串上自動執行 ASCII 與 EBCDIC 之間的任何轉換。 如有必要,程式可以使用 Common Service Verb (CSV) CONVERT 將字串從一個字元集轉譯為另一個字元。