Показать сообщение отдельно
Старый 17.10.2012, 15:29   #2  
LRA is offline
LRA
Участник
 
41 / 39 (2) +++
Регистрация: 19.12.2005
Адрес: Москва
Для тестирования использую следующий код.
Для тестирования использую следующий код. В теле сообщения произвольный текст, а не XML, но это прокатывает.


X++:
    AifChannelId        channelId   = "myTstChannelOut"; // TODO необходимо задать код канала с формы Каналы
    AifChannel          channel     = AifChannel::find(channelId);
    AifAdapter          adapter     = AifAdapter::find(channel.AdapterClassId);
    AifInfoLog          aifInfoLog  = new AifInfoLog();
    AifMessageId        messageId   = newguid();
    UserID              userID      = curuserid();
    SysDictClass        adapterClassObject;
    AifMSMQSendAdapter  sendAdapter;
    AifResourceLockId   channelLockId;
    boolean             inAdapterTransaction = false;
    AifGatewayMessage   gatewayMessage;
    AifMessage          message;
    AIfresourceLock     resourceLock;
    AifIntegrationAdapter       integrationAdapter;
    ;
    // delete_from resourceLock;
    channelLockId = AifResourceLock::lockResource(channelId, AifResourceType::Channel, AifResourceLockType::Gateway);
    if (guid2str(channelLockId) != #EmptyGuidString)
    {
        try
        {
            aifInfoLog.reset();
            adapterClassObject = new SysDictClass(channel.AdapterClassId);
            if (adapterClassObject.isImplementing(classnum(AifIntegrationAdapter)))
            {
                integrationAdapter = adapterClassObject.makeObject();
                sendAdapter = new AifMSMQSendAdapter();
                if (sendAdapter == null)
                    throw error(strfmt("@SYS95140", classId2Name(classidget(integrationAdapter))));
            }
            // new InteropPermission(InteropKind::ClrInterop).assert(); // TODO Раскоментарить если выполняется на сервере
            sendAdapter.initialize(channel.TransportAddress, channelId);
            ttsbegin;
            sendAdapter.begin();
            inAdapterTransaction = true;
            gatewayMessage = new AifGatewayMessage(
                            'Привет мир!',
                            enum2str(AifGlobalSettings::getEncodingFormat()),
                            userID,
                            messageId);
            // Send message
            sendAdapter.sendMessage(gatewayMessage);
            // Update messageLog message as Processed
            if (AifMessageManager::isNewMessage(gatewayMessage.parmMessageId()) == false)
            {
                message = AifMessageManager::read(gatewayMessage.parmMessageId());
                message.status(AifMessageStatus::Processed);
                AifMessageManager::update(message, classstr(AifGatewaySendService), false);
            }
            // Commit transaction
            sendAdapter.commit();
            ttscommit;
 
            CodeAccessPermission::revertAssert();
        }
        catch(Exception::CLRError)
        {
            AifResourceLock::releaseResource(channelLockId);
            throw error(AifUtil::getClrErrorMessage());
        }
    }
    sendAdapter.terminate();
    AifResourceLock::releaseResource(channelLockId);
 
    info(strFmt("Готово! %1", messageId));

Последний раз редактировалось LRA; 17.10.2012 в 15:32.