Magento Forum

   
Magento en Ms Query
 
mauricenl
Jr. Member
 
Total Posts:  6
Joined:  2009-03-23
NL
 

Hallo,

Hier een bericht van een echte Magento ‘Newby’ grin

Wij hebben een groothandel en gebruiken de Exact Globe software als ERP oplossing. Binnen de ERP hebben we een productstructuur die we willen gebruiken in een online catalogus / webshop.

Wij willen een publieke web-catalogus maken en een afgeschermde webshop voor de detailhandel. Om deze catalogus / webshop omgeving up to date te houden, is onze wens een koppeling te maken met onze ‘ERP database gebaseerd op Ms SQL database’ d,m,v, een synchronisatie.

Ons idee daarbij is dat wanneer zich bijvoorbeeld een prijswijziging van een product voordoet binnen de ‘Exact database’ dit te synchroniseren is met de webshop.

Deze synchronisatie willen we beperken tot een periodieke import van een SQL query van alleen de product structuur (product-, omschrijving, afbeelding, consumentenprijs, winkelprijs).

Is dit te realiseren binnen Magento en heeft iemand van jullie ervaringen met een dergelijke implementatie?
Kunnen we daarbij volstaan met de ‘community versie’ of is de ‘enterprise versie’ een echte vereiste?
Alvast dank voor jullie reactie.

Maurice

 
Magento Community Magento Community
Magento Community
Magento Community
 
Brent W Peterson
Mentor
 
Avatar
Total Posts:  3215
Joined:  2009-02-26
Minneapolis MN
 

Ik regelmatig updates met MS SQL via HTTP oproepen van opgeslagen procedures.

Het zou heel gemakkelijk zijn om dezelfde updates te doen. Ik kan sturen u TSQL code als je wilt

 
Magento Community Magento Community
Magento Community
Magento Community
 
Brent W Peterson
Mentor
 
Avatar
Total Posts:  3215
Joined:  2009-02-26
Minneapolis MN
 

Ik was zo opgewonden om iemand anders gebruik van MS SQL, dat ik zojuist besloten om mijn oplossing na te vinden, kunt u genieten van een verantwoorde!

USE [DATABASE_NAME]
GO
/****** Object:  StoredProcedure [dbo].[usp_httppost]    Script Date: 03/11/2010 11:18:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
    This is a procedure, not an udf because of the exec insert at the end
    The exec insert is needed because the response can exceed 8000 characters

    Normally, one should call methods like this :
    exec    @rc    = master.dbo.sp_OAMethod @http, 'Open', NULL, 'POST' ,'www.d-trix.com/default.asp', 0

    But this does not work with WinHttp.WinHttpRequest.5.1 and gives different errors
    So we call methods like this
    exec    @rc    = master.dbo.sp_OAMethod @http, 'Open("POST","www.d-trix.com/default.asp",0)'

    if a (temp) table with the name #usp_httppost exists, the procedure will
    insert the result into that table.
    if not, the procedure will return a resultset with the results
*/
ALTER procedure [dbo].[usp_httppost]
(
    @
URL varchar(512),
    @
post varchar(4000)
    --@
WebLogin varchar(128) = null,
    --@
WebPassword varchar(128) = null,
    --@
ProxyLogin varchar(128) = null,
    --@
ProxyPassword varchar(128) = null
)
/*
returns @usp_httppost table
    (
        return_status bit null, -- 0 is OK, 1 is error
        error_msg varchar(4096) null,
        HTTP_Status varchar(30) null,
        HTTP_AllResponseHeaders text null,
        HTTP_ResponseText text null
    )
*/
as
begin
    
/*******************************************************************
    Name        : usp_httppost
    Server      : SQLserver 2000 
    Description : Post data as coming from an HTML FORM with METHOD=POST
                  to an URL and retrieve the result.
    Parameters  : @URL : the url to use ( like https://www.domain.com )
                  @post : the parameters to post
                  @WebLogin : (optional) The Username for the webserver
                  @WebPassword : (optional) The password for the webserver
                  @ProxyLogin : (optional) The Username for the proxyserver
                  @ProxyPassword : (optional) The password for the proxyserver
    Notes       : . The data to be posted should be like ?param1=val1&par2;=val2
                  . if a table called #usp_httppost exists, the result is stored
                    into that table. If not, the procedure returns a resultset.    
    *******************************************************************/

    
set nocount on

    
declare    @http int, -- the objecttoken for WinHttp.WinHttpRequest.5.1
        
@rc int, -- the return code from sp_OA procedures
        
@src varchar(255), -- the source of an error
        
@desc varchar(512), -- the desciption of an error
        
@Doing varchar(512), -- What are we doing when calling a sp_OA proc
        
@TableExisted bit, -- Did the temp table exists yes(1) or no(0)
        @
WebLogin varchar(128) = null,
        @
WebPassword varchar(128) = null,
        @
ProxyLogin varchar(128) = null,
        @
ProxyPassword varchar(128) = null

    
-- init

    set 
@rc 0

    
if object_id('tempdb..#usp_httppost'is null
    begin
        
-- The temp table #usp_httppost does not exists
        
set @TableExisted 0
        create table 
#usp_httppost
        
(
            
return_status bit null, -- 0 is OK1 is error
            error_msg varchar
(4096null,
            
HTTP_Status varchar(30null,
            
HTTP_AllResponseHeaders text null,
            
HTTP_ResponseText text null
        
)
    
end
    
else
    
begin
        set 
@TableExisted 1
        truncate table 
#usp_httppost
    
end
 
    
-- Insert a default record

    insert    
#usp_httppost ( return_status, error_msg )
    
values    'Unknown error' )

    -- 
create a table to store output from different sp_OA calls

    create table 
#tempresult
    
(
        
HTTP_Status varchar(30null,
        
HTTP_AllResponseHeaders text null,
        
HTTP_ResponseText text null
    
)
    
    -- 
create the 'WinHttp.WinHttpRequest.5.1' object

    set    
@Doing    'Create WinHttp.WinHttpRequest.5.1 object.'
    
exec    @rc    master.dbo.sp_OACreate 'WinHttp.WinHttpRequest.5.1', @http output 
    
if @rc <> goto Error


    
-- open the url on the server

    set    
@Doing 'Open("POST" , "' + @URL '", 0 )'
    
exec    @rc    master.dbo.sp_OAMethod @http, @Doing
    
if @rc <> goto Error

    
-- set the SetRequestHeader

    set     
@Doing 'SetRequestHeader("Content-Type","application/x-www-form-urlencoded")'
    
exec    @rc    master.dbo.sp_OAMethod @http,@Doing
    
if @rc <> goto Error

    
if @WebLogin is not null AND @WebPassword is not null
    begin
        
-- Set the Credentials for the Webserver

        set    
@Doing 'SetCredentials("' + @WebLogin '","' + @WebPassword '",0)'
        
exec    @rc    master.dbo.sp_OAMethod @http, @Doing
        
if @rc <> goto Error
    end

    
if @ProxyLogin is not null AND @ProxyPassword is not null
    begin
        
-- Set the Credentials for the Proxy

        set    
@Doing 'SetCredentials("' + @ProxyLogin '","' + @ProxyPassword '",1)'
        
exec    @rc    master.dbo.sp_OAMethod @http, @Doing
        
if @rc <> goto Error
    end

    
-- send the info

    set     
@Doing 'Send("' + @post '")'
    
exec    @rc    master.dbo.sp_OAMethod @http,@Doing
    
if @rc <> goto Error

    
-- Get the HTTP_Status

    set    
@Doing 'Status'
    
truncate table    #tempresult
    
insert    #tempresult (HTTP_Status)
    
exec    @rc sp_OAMethod @http,@Doing 
    
if @rc <> goto Error

    update    
#usp_httppost
    
set    HTTP_Status #tempresult.HTTP_Status
    
from    #tempresult
    
where    #tempresult.HTTP_Status is not null

    
-- Get the ResponseHeaders

    set    
@Doing 'GetAllResponseHeaders'
    
truncate table    #tempresult
    
insert    #tempresult (HTTP_AllResponseHeaders)
    
exec    @rc sp_OAMethod @http,@Doing 
    
if @rc <> goto Error

    update    
#usp_httppost
    
set    HTTP_AllResponseHeaders #tempresult.HTTP_AllResponseHeaders
    
from    #tempresult
    
where    #tempresult.HTTP_AllResponseHeaders is not null

    
-- retrieve the ResponseText
    
    set    
@Doing 'ResponseText'
    
truncate table    #tempresult
    
insert    #tempresult (HTTP_ResponseText)
    
exec    @rc sp_OAMethod @http,@Doing 
    
if @rc <> goto Error

    update    
#usp_httppost
    
set    HTTP_ResponseText #tempresult.HTTP_ResponseText
    
from    #tempresult
    
where    #tempresult.HTTP_ResponseText is not null

    
-- Everything went well

    update 
#usp_httppost
    
set return_status 0,error_msg 'DONE'

    
-- if we get here the normal waydon't do error
    GOTO Cleanup

    Error:

    -- Get error information

    if @http is not null
    begin
        exec sp_OAGetErrorInfo @http, @src OUT, @desc OUT
    end
    else
    begin
        set @src = '
?'
        set @desc = '
?'
    end

    update #usp_httppost
    set    return_status = 1,
        error_msg = 
            '
Error ['        + ISNULL( master.dbo.fn_hexadecimal(@rc)    ,'' ) +
            '
], While ['        + ISNULL( @Doing                , '' ) + 
            '
]Source ['        + ISNULL( @src                  , '' ) + 
            '
]Description ['    + ISNULL( @desc                    , '' ) + ']'

    -- Destroy created object(s)
    
    Cleanup:
    if @http is not null
    begin
        exec    @rc    = master.dbo.sp_OADestroy @http
        set @http = null
        if @rc <> 0 goto Error
    end

    -- Give the result back to the caller

    Result:
    if @TableExisted = 0
        select * from #usp_httppost

    return 0
end

I am using MS SQL Server 2008

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
    Back to top