Business - CRM

SAP Business One Integração com Sistema de Gerenciamento de Serviços

Neste pequeno artigo nós apresentaremos um exemplo de integração utilizando código C#. O Sistema de Gerenciamento de Serviços utiliza o Microsoft CRM para armazenar as horas de serviços.

por Douglas Oyama



Neste pequeno artigo nós apresentaremos um exemplo de integração utilizando código C#. O Sistema de Gerenciamento de Serviços utiliza o Microsoft CRM para armazenar as horas de serviços. A integração inclui o Código do Cliente, Horas Trabalhadas, Preço da Hora, Descrição do Serviço e o Código do Serviço de vários objetos do MS CRM 3.0, como as Atividades, Nome do Usuário, Contas e envia eles para a tabela “temporária” ALBATIMELOG, cujos dados disponíveis serão enviados para o SAP B1. A integração utilizou como base o SAP Business One SDK – Por favor, verifique com o fornecedor do seu SAP B1 para maiores esclarecimentos sobre o processo de integração.

Este caso mostra que você poderá utilizar o SAP Business One como uma solução ERP para companhias de Serviços: Reparo e Manutenção, Organização de Projetos, Consultorias, Comunicação, Telefonia e etc. SAP Business One é multi-moeda e possui integração com SAP my SAP, SAP all-in-one, R/3. Nós conhecemos casos onde o SAP B1 está integrado com sistemas de ERP da Microsoft, como o Microsoft Great Plains Dynamics GP, Oracle eBusiness Suite/Financials – isto é importante para companhias multi-nacionais que possuem filiais no Brasil.

Esta é a tabela de integração. As transações do seu banco de dados legado deverão ser sempre exportadas para esta tabela.

A tela abaixo representa um Pedido de Vendas no SAP Business One. Você pode perceber que o Item é idêntico ao último registro da tabela acima.

Abaixo está o código da aplicação, você deverá criar um projeto C# Console Application no MS Visual Studio.

using Microsoft.VisualBasic;

using System;

using System.Collections;

using System.Data;

using System.Diagnostics;

using System.Data.SqlClient;

namespace ConsoleApplication2

{

sealed public class OrderApp

{

public static DataTable TableLines; // O datasource do datagrid chamado DataLines.

public static SAPbobsCOM.Documents oOrder; // Objeto Pedido

public static SAPbobsCOM.Documents oInvoice; // Objeto Nota Fiscal

public static SAPbobsCOM.Recordset oRecordSet; // Objeto Recorset

public static SAPbobsCOM.Company oCompany; // Objeto Companhia

// Variáveis de erros

public static string sErrMsg;

public static int lErrCode;

public static int lRetCode;

static string description, itemnumber, accountNumber;

public static void Main()

{

int docNumber=0;

OrderApp.oCompany = new SAPbobsCOM.Company();

OrderApp.oCompany.Server = "localhost"; //Altere para o nome do servidor da sua empresa

OrderApp.oCompany.language = SAPbobsCOM.BoSuppLangs. ln_Portuguese_Br; //Altere para a sua linguagem

OrderApp.oCompany.UseTrusted = true;

OrderApp.oCompany.CompanyDB = "TEST_SAPBO_ALBA_US";

OrderApp.oCompany.UserName = "manager";

OrderApp.oCompany.Password = "manager";

OrderApp.oCompany.Connect();

Console.WriteLine("Company is: "+OrderApp.oCompany.CompanyName);

SqlConnection connection = new SqlConnection();

connection.ConnectionString = "Integrated Security = true;Data Source = CRMSERVER; Initial Catalog = CRMCUSTOMIZATION;";

connection.Open();

SqlCommand command = new SqlCommand();

command.CommandType = System.Data.CommandType.Text;

command.CommandText = "SELECT * FROM ALBATIMELOG";

command.Connection = connection;

SqlDataReader reader = command.ExecuteReader();

while(reader.Read())

{

decimal billableTime, unitPrice, lineTotal;

double bTime, uPrice;

description="";

itemnumber="";

accountNumber="";

Console.WriteLine("Record:");

//Lendo da tabela timelog

accountNumber=reader.GetSqlString(0).ToString();

billableTime=reader.GetSqlDecimal(1).Value;

unitPrice=reader.GetSqlDecimal(2).Value;

lineTotal=reader.GetSqlDecimal(3).Value;

description=reader.GetSqlString(4).ToString();

itemnumber=reader.GetSqlString(5).ToString();

//Adicionar campos

bTime=(double)billableTime;

uPrice=(double)unitPrice;

Console.WriteLine(billableTime);

Console.WriteLine(billableTime.ToString());

Console.WriteLine(unitPrice.ToString());

Console.WriteLine(lineTotal.ToString());

Console.WriteLine(description.ToString());

Console.WriteLine(itemnumber.ToString ());

Console.WriteLine();

//Adicionar Pedidos

OrderApp.oOrder = ( ( SAPbobsCOM.Documents )( OrderApp.oCompany.GetBusinessObject( SAPbobsCOM.BoObjectTypes.oOrders ) ) );

//Configurações do Objeto Pedido

OrderApp.oOrder.CardCode = accountNumber;

OrderApp.oOrder.HandWritten = SAPbobsCOM.BoYesNoEnum.tNO;

SAPbobsCOM.Recordset rs = null;

//Cria o número do próximo Pedido

object sSQL = "SELECT TOP 1 DocNum FROM dbo.ORDR ORDER BY DocNum DESC";

rs = ( ( SAPbobsCOM.Recordset )( OrderApp.oCompany.GetBusinessObject( SAPbobsCOM.BoObjectTypes.BoRecordset ) ) );

rs.DoQuery( System.Convert.ToString( sSQL ) );

while ( !( ( rs.EoF ) ) )

{

docNumber=System.Convert.ToInt32( rs.Fields.Item( 0 ).Value ) + 1;

rs.MoveNext();

}

//Moeda Default

string dfcurrency="";

sSQL = "SELECT MainCurncy FROM dbo.OADM";

rs = ( ( SAPbobsCOM.Recordset )( OrderApp.oCompany.GetBusinessObject( SAPbobsCOM.BoObjectTypes.BoRecordset ) ) );

rs.DoQuery( System.Convert.ToString( sSQL ) );

while ( !( ( rs.EoF ) ) )

{

dfcurrency= System.Convert.ToString(rs.Fields.Item( 0 ).Value);

rs.MoveNext();

}

OrderApp.oOrder.DocNum = docNumber;

OrderApp.oOrder.DocDate = System.DateTime.Today;

OrderApp.oOrder.DocDueDate = System.DateTime.Today.AddDays(30);

OrderApp.oOrder.DocCurrency = dfcurrency;

OrderApp.oOrder.Lines.ItemCode = itemnumber;

OrderApp.oOrder.Lines.ItemDescription = description;

OrderApp.oOrder.Lines.Quantity = bTime;

OrderApp.oOrder.Lines.Price = uPrice;

OrderApp.oOrder.Lines.TaxCode = "00";

OrderApp.oOrder.Lines.LineTotal = uPrice*bTime;

//ATENÇÃO – Você não deverá adicionar a pròxima linha !!!

//OrderApp.oOrder.Lines.Add();

OrderApp.oCompany.GetLastError( out lErrCode, out sErrMsg );

lRetCode = OrderApp.oOrder.Add(); //Tenta adicionar o Pedido no Banco de Dados

if ( lRetCode != 0 )

{

OrderApp.oCompany.GetLastError( out lErrCode, out sErrMsg );

}

}

}

}

}

Douglas Oyama

Douglas Oyama - Alba Spectrum Group. São Paulo - SP - Brazil
+55-11-3444-4949, help@albaspectrum.com or skype: albaspectrum, US: 1-630-961-5918 or 1-866-528-0577