Публикация Workflow SCS в качестве веб-сервиса

Автор Сообщение
Удалён
Гость

Добавлено: 30.04.2010 08:11 Заголовок сообщения: Публикация Workflow SCS в качестве веб-сервиса
Здравствуйте коллеги!

Не подскажете такую вещь. Как можно вызвать веб-сервис, который был сделан в iScala Service connect и опубликован в качестве веб-сервиса, из внешнего приложения? Предпочитаемые методы это VB .NET или ASP .NET.

Заранее благодарен.

Dmitry Pestov
Заслуженный форумщик

Зарегистрирован: 21.06.2007
Сообщения: 94
Откуда: Москва, ApicoSoft

Добавлено: 03.05.2010 11:28 Заголовок сообщения: Re: Публикация Workflow SCS в качестве веб-сервиса

Михаил писал(а):
Не подскажете такую вещь. Как можно вызвать веб-сервис, который был сделан в iScala Service connect и опубликован в качестве веб-сервиса, из внешнего приложения? Предпочитаемые методы это VB .NET или ASP .NET.

Добрый день!

В общем никаких проблем нет, в поставке Скалы есть пример с исходниками (консольное приложение).
Я делал буквально на днях таким способом импорт прейскурантов, так что если будут вопросы, то постараюсь помочь, я, правда, сейчас в отъезде, вернусь на следующей неделе.
_________________
Dmitry Pestov

Блог ScalaHelp.RU — практические вопросы использования Scala

Удалён
Гость

Добавлено: 04.05.2010 07:32 Заголовок сообщения: Re: Публикация Workflow SCS в качестве веб-сервиса
Спасибо. Но пример консольного приложения на С# у меня тоже есть, вот на VB.NET хотелось бы чего-нибудь в том же роде.
Dmitry Pestov
Заслуженный форумщик

Зарегистрирован: 21.06.2007
Сообщения: 94
Откуда: Москва, ApicoSoft

Добавлено: 19.05.2010 10:18 Заголовок сообщения: Re: Публикация Workflow SCS в качестве веб-сервиса

Михаил писал(а):
Спасибо. Но пример консольного приложения на С# у меня тоже есть, вот на VB.NET хотелось бы чего-нибудь в том же роде.

Извиняюсь, отвлекся и забыл про этот вопрос.

У меня есть такое приложение и писалось оно как раз на VB.NET. Проблема в том, что там куча лишних деталей, и выкладывать само приложение смысла нет. Ниже три основные процедуры, одна инициализирует сервисы, остальные обновляют запас и прейскурант.
Сами процессы, к которым они обращаются, содержат только один соответствующий менеджер.

Код:
    Private StockItemCtx As StockItemService.ctx
    Private StockItemErrors As StockItemService.Errors = Nothing
    Private PriceListCtx As PriceListService.ctx
    Private PriceListErrors As PriceListService.Errors = Nothing
    Private Sub InitServices(ByVal UpdateStockItem As Boolean, ByVal UpdatePriceList As Boolean)
        If UpdateStockItem Then
            StockItemCtx = New StockItemService.ctx
            StockItemCtx.CompanyCode = "11"
            StockItemCtx.FiscalYear = Today.Year
            StockItemErrors = Nothing
        End If

        If UpdatePriceList Then
            PriceListCtx = New PriceListService.ctx
            PriceListCtx.CompanyCode = "11"
            PriceListCtx.FiscalYear = Today.Year
            PriceListErrors = Nothing
        End If
    End Sub

    Private Sub ProcessStockItem(ByVal item As Dictionary(Of String, String), ByVal UpdatePriceList As Boolean)
        Dim req = New StockItemService.Requests
        Dim StockItem = New StockItemService.StockItem

        StockItem.StockCode = item("STOCKCODE")
        If fields.Contains("DISCOUNTCODE") Then
            StockItem.DiscountCode = item("DISCOUNTCODE")
            StockItem.DiscountCodeSpecified = True
        End If
        If fields.Contains("UNITNAMESTOCK") Then StockItem.UnitNameStock = item("UNITNAMESTOCK")
        If fields.Contains("UNITNAMEPURCHASE") Then StockItem.UnitNamePurchase = item("UNITNAMEPURCHASE")
        If fields.Contains("UNITNAMESALES") Then StockItem.UnitNameSales = item("UNITNAMESALES")

        ‘ цену обновляем, если только не будет обновления прейскурантов
        If Not UpdatePriceList AndAlso fields.Contains("PRICE") Then
            StockItem.Price = Val(item("PRICE"))
            StockItem.PriceSpecified = True
        End If

        Dim StockItems(0) As StockItemService.StockItem
        StockItems(0) = StockItem
        req._requests = StockItems

        Using svc As New StockItemService.StockItemUpdateSoapClient
            svc.Execute(req, StockItemCtx, Nothing, StockItemErrors)
        End Using

        For Each ErrMsg In StockItemErrors._errors
            If ErrMsg.type <> StockItemService.typeErrType.info Then
                Log(MsgType.Error, String.Format("{0} — {1}", ErrMsg.description, ErrMsg.source))
            End If
        Next

    End Sub

    Private Sub ProcessPriceList(ByVal item As Dictionary(Of String, String), ByVal Levels As Integer)
        Dim req = New PriceListService.Requests
        Dim PriceList = New PriceListService.PriceList

        PriceList.ID = "00"
        PriceList.Currency = "RUB"

        PriceList.Items = Array.CreateInstance(GetType(PriceListService.Item), 1)
        PriceList.Items(0) = New PriceListService.Item
        PriceList.Items(0).StockCode = item("STOCKCODE")

        PriceList.Items(0).Prices = Array.CreateInstance(GetType(PriceListService.Price), 1)
        PriceList.Items(0).Prices(0) = New PriceListService.Price
        PriceList.Items(0).Prices(0).Value = Val(item("PRICE"))

        If Levels > 0 Then
            PriceList.Items(0).Prices(0).DiscLevels = Array.CreateInstance(GetType(PriceListService.typeDiscLevels), Levels)

            Dim lev As Integer = 0
            For Each qty As String In fields.Where(Function(key) key Like "QTY[1-8]")
                PriceList.Items(0).Prices(0).DiscLevels(lev) = New PriceListService.typeDiscLevels
                PriceList.Items(0).Prices(0).DiscLevels(lev).Qty = Val(item(qty))
                PriceList.Items(0).Prices(0).DiscLevels(lev).Price = Val(item("PRICE" + qty.Last()))
                PriceList.Items(0).Prices(0).DiscLevels(lev).PriceSpecified = True
                lev += 1
            Next
        End If

        Dim PriceLists(0) As PriceListService.PriceList
        PriceLists(0) = PriceList
        req._requests = PriceLists

        Using svc As New PriceListService.PriceListUpdateSoapClient
            svc.Execute(req, PriceListCtx, Nothing, PriceListErrors)
        End Using

        For Each ErrMsg In PriceListErrors._errors
            If ErrMsg.type <> PriceListService.typeErrType.info Then
                Log(MsgType.Error, ErrMsg.description)
            End If
        Next

    End Sub

Во всем этом коде тоже лишних деталей уйма, но, надеюсь, это лучше, чем ничего.
_________________
Dmitry Pestov

Блог ScalaHelp.RU — практические вопросы использования Scala

Удалён
Гость

Добавлено: 19.05.2010 10:51 Заголовок сообщения: Re: Публикация Workflow SCS в качестве веб-сервиса
Спасибо. Очень полезно. Буду смотреть.