6.1.2. Web servislerin kullanılması


<< Prev   Next >>

Paylaşılan Infobase listesini web servisi aracılığıyla almak için, listeyi döndürecek belirli bir web servisi yayınlamanız gerekir. Bu web servisi aşağıda daha ayrıntılı olarak açıklanmaktadır.

6.1.2.1. Genel bakış

Etkileşimli başlatıcı (1cv8s) paylaşılan Infobase listesini yerel bir ağdan ya da İnternetten alabilir. Paylaşılan Infobase listesini İnternetten almak için etkileşimli başlatıcıyı başlatmanız ve listenin adresini belirtmeniz gerekir (1cestart.cfg dosyasındaki InternetService veya WebCommonInfoBases parametresi).

Paylaşılan Infobase listesi alma prosedürü aşağıdaki gereksinimleri karşılamalıdır:

  • WebCommonInfoBases.CheckInfoBases() yöntemi anonim olarak çağrılır.
  • WebCommonInfoBases.GetInfoBases() yöntemi kimlik doğrulama ile çağrılır.
  • Paylaşımlı Infobase listelerini döndüren Infobase, bu listeleri talep etmesine izin verilen kullanıcıların listesini içermelidir.

İlk önce, WebCommonInfoBases.CheckInfoBases() yöntemi çağrılır (anonim olarak). Başlatıcı bu bilgisayar ve bu kullanıcı için ilk kez manuel olarak başlatılırsa, ClientID ve InfoBasesCheckCode parametreleri 00000000-0000-0000-0000-00000000 değerini alır. Başlatıcı ilk kez başlatılmıyorsa, istemci kodu ve geçerli paylaşımlı Infobase listesinin kodu parametre olarak aktarılır. Web servisi yöntemi, istemci için paylaşımlı Infobase listesinin güncellenmesi gerekip gerekmediğini belirler. Güncelleme gerekiyorsa InfoBasesChanged çıkış parametresi True olarak ayarlanmalıdır ve URL parametresi, WebCommonInfoBases.GetInfoBases() yöntemini uygulayan web hizmetinin adresini içermelidir (kimlik doğrulama gerektirir). Aksi takdirde, InfoBasesChanged değeri False olarak ayarlanmalı ve URL boş bir dize içermelidir.

Paylaşımlı Infobase listesindeki değişiklikleri kontrol etme algoritması düzenlenmemiştir ve isteğe bağlı olabilir. Başlatıcının paylaşımlı Infobase listesini tanımlayan kod değerini hesaplamadığını, sadece web servisinin bir önceki çağrısı sırasında aktarılan değeri sakladığını unutmayın.

WebCommonInfoBases.CheckInfoBases() yönteminin çağrısının sonuçları listenin güncellenmesi gerektiğini gösteriyorsa, başlatıcı web servisinin WebCommonInfoBases.GetInfoBases() yöntemini çağırır. Web servisi, URL parametresinde WebCommonInfoBases.CheckInfoBases() fonksiyonu tarafından döndürülen adreste bulunur. GetInfoBases() yöntemi, adına web servisinin bir istemci koduyla doğrulandığı kullanıcıyla eşleşmelidir. Kullanıcı kendisini kişisel kullanıcı adı ve parolasıyla tanımladığında ve kişisel paylaşılan infobase listesini aldığında, eşleme "kişisel" olabilir. Buna ek olarak, kullanıcı Operator, Storekeeper vb. gibi belirli bir role ait olduğunu tanımladığında ve aynı role sahip tüm kullanıcılar için ortak olan paylaşımlı infobase listesini elde ettiğinde eşleme "rol bazlı" olabilir. İlk durumda, GetInfoBases() yöntemini uygulayan Infobase'in, bu web servisine bağlı 1cv8s başlatıcısını çalıştırabilen tüm kullanıcıların listesini içermesi gerektiğine dikkat etmelisiniz. İkinci durumda, kullanıcı listesi yalnızca rol adlarını içerebilir.

GetInfoBases() yöntemi üç değeri döndürmelidir:

  • İstemci kodu (belirtilmemişse).
  • v8i formatında paylaşımlı infobase listesi.
  • Geçilen Infobase listesini tanımlayan kod değeri. Bu değer, paylaşımlı infobase listesinin güncellenmesi gerekip gerekmediğine ilişkin bir sonraki kontrolde WebCommonInfoBases.CheckInfoBases() yöntemine aktarılacaktır.

Paylaşımlı Infobase listesi ilk kez alınıyorsa, istemci kodu (ClientID parametresi) 00000000-0000-0000-0000-00000000 olacaktır.

Aşağıdaki hususlar da göz önünde bulundurulmalıdır:

  • WebCommonInfoBases web servisini uygulayan Infobase'in iki farklı yayında yayınlanması gerekir. Bunun nedeni CheckInfoBases() ve GetInfoBases() yöntemlerinin çağrılmasının farklı kimlik doğrulama düzeyleri gerektirmesidir.
  • Anonim erişim, erişimin adına gerçekleştirildiği kullanıcı default.vrd dosyasında açıkça belirtilerek düzenlenir.
  • Adına anonim erişim düzenlenen kullanıcı, Infobase listesini almak için yöntemi çağıramamalıdır. Kullanıcı, yalnızca iletilen ClientID değeri için listenin değişip değişmediğini belirtmelidir.
  • WebCommonInfoBases web servisini sunan tüm yayınlar web istemcisini yasaklamalıdır.
  • Paylaşılan Infobase listesi mobil istemci tarafından kullanılıyorsa, mobil istemcide görüntülenecek Infobase'ler için bu dosya MobilePublicKey parametresinin doğru değerlerini içermelidir.

6.1.2.2. Web servisi açıklaması

Web servisi adı: WebCommonInfoBases. Herhangi bir web servisi yönteminin yürütülmesi için zaman aşımı 3 saniyedir.

Web servisi yöntemleri aşağıda listelenmektedir.

CheckInfoBases

Açıklama:

Bu yöntem 1cv8s başlatıcısı tarafından paylaşılan Infobase listesinin alınması gerekip gerekmediğini belirlemek için kullanılır.

Parametreler:

ClientID girdi

String. Paylaşılan Infobase listesinin güncellenmesi gerekip gerekmediğini kontrol etmek için kullanılan istemci kimliğini içerir.

InfoBasesCheckCode girdi

String. Paylaşımlı Infobase listesini tanımlar. Kod, geçerli paylaşımlı Infobase listesini benzersiz biçimde tanımlamalıdır. Liste herhangi bir değişikliğe uğrarsa kod için daha önce bu müşteri kimliği için kullanılmamış yeni bir değer atanması gerekir.

InfoBasesChanged çıktı

Boolean. Paylaşımlı Infobase listesinin tekrar alınması gerektiğini belirtir.

URL çıktı

String. Paylaşımlı Infobase listesi son çağrıdan bu yana değişmişse istenecek URL.

Dönüş değeri:

İsteğe bağlı tür, değer göz ardı edilir.

getInfoBases

Açıklama:

Parametreler:

ClientID girdi/çıktı

String. Paylaşımlı Infobase listesinin alındığı istemci kimliğini içerir. İstemci kimliği belirtilmemişse (veya 00000000-0000-0000-0000-000000000000 değerine eşitse), yöntem istemci kimliğini atar ve bu parametrede döndürür.

InfoBasesCheckCode çıktı

String. InfoBases parametresinde bu yöntem tarafından döndürülen paylaşımlı Infobase listesini tanımlayan kodun değeri.

InfoBases çıktı

String. v8i formatında paylaşımlı infobase listesi.

Dönüş değeri:

İsteğe bağlı tür, değer göz ardı edilir.

6.1.2.3. Uygulama örneği

Bu bölümde, paylaşımlı Infobase listesini almak için kullanılan bir web servisi örneği incelenmektedir.

Web servisi olarak, bir katalog ve bir web servisi içeren basit bir konfigürasyon kullanılmaktadır.

Katalog şu şekilde organize edilmiştir:

  • Ad SaredInfoBasesList.
  • Kod tipi String, uzunluk 36 karakter.
  • Öznitelikler:
    • Ad ListCode, tür UniqueIdentifier.
    • Ad IBList, tür String, sınırsız uzunluk.
  • Kalan parametreler varsayılan değerlere sahiptir.

Bu katalog, istemci kimliklerinin listesini (standart öznitelik Code), paylaşımlı Infobase listesini (öznitelik IBList) ve listenin bu istemci için en son ne zaman alındığını belirleyen Infobase listesinin geçerli sürümünü (öznitelik ListCode) depolayacaktır. Listenin sürümü benzersiz tanımlayıcıdır ve bir dizin öğesi her kaydedildiğinde değiştirilir. Bu amaçla nesne modülünde BeforeWrite işleyicisi tanımlanmıştır:

Procedure BeforeWrite(Cancel)
ListCode = New UniqueIdentifier;
EndProcedure

Ayrıca konfigürasyonda WebCommonInfoBases web servisi aşağıdaki işlemler tanımlanmış olarak oluşturulmalıdır:

  • CheckInfoBases, Return value type özelliği string olarak ayarlanır, Possibly empty value onay kutusu seçilir. Kalan özellikler varsayılan değerlere ayarlanır.
  • GetInfoBases, Return value type özelliği string olarak ayarlanır, Possibly empty value onay kutusu seçilir. Kalan özellikler varsayılan değerlere ayarlanır.

Web servisi işlemlerinin metni:

Function CheckInfoBases(ClientID, InfoBasesCheckCode, InfoBaseChanged, URL)

If ClientID = "00000000-0000-0000-0000-000000000000"
And InfoBasesCheckCode = "00000000-0000-0000-0000-000000000000" Then
// the first request of the client
InfoBaseChanged = True;
URL = "/listservice2/ws/WebCommonInfoBases";
Return "";
EndIf;
Client = Catalogs.SharedBaseList.FindByCode(ClientID);
If Client.Empty() Then
// no such client
InfoBaseChanged = False;
Else
// check that the list on the client and our list are the same
If InfoBasesCheckCode = Client.ListCode Then
// the list is not changed
InfoBaseChanged = False;
URL = "";
Else
// the list is changed
InfoBaseChanged = True;
URL = "/listservice2/ws/WebCommonInfoBases";
EndIf;
EndIf;
Return "";
EndFunction

Function GetInfoBases(ClientID, InfoBasesCheckCode, InfoBases)

If ClientID = "00000000-0000-0000-0000-000000000000" Then
CurUser = InfoBaseUser.CurrentUser();
// need to add new client
// as a code of the catalog element the unique identifier
// of the Infobase user will be used
Object = Catalogs.SharedBaseList.NewElement();
Object.Code = String (CurUser.UniqueIdentifier);
// the client name will be equal to the user name
Object.Name = CurUser.Name;
// the IB list is empty at the first call
Object.IBList = "";
Object.Write();
// to form the returned values of the web service
InfoBasesCheckCode = Object.CodeList;
InfoBases = Object.IBList;
ClientID = Object.Code;
Else
// here we get the data for the existing client code
Client = Catalogs.SharedBaseList.FindByCode(ClientID);
If Client.Empty() Then
// no such client
InfoBasesCheckCode = "";
InfoBases = "";
Else
InfoBasesCheckCode = Client.CodeList;
InfoBases = Client.IBList;
EndIf;
EndIf;
Return "";

EndFunction

Konfigürasyon oluşturulduktan sonra, web servisi web sunucusunda iki kez yayınlanmalıdır. Daha sonra yayınlanan web servislerinin adresleri saklanmalıdır. Web servislerinin adreslerde yayınlandığını varsayalım:

Infobase şu kullanıcıları içermelidir: Anonymous ve, örneğin, Operator, Storekeeper, Accountant.

http://localhost/listservice adresindeki yayını tanımlayan default.vrd dosyası aşağıdaki gibidir:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/listservice"
ib="File=X:\DB\ListBase;Usr=Anonimous"
 enable="false">
<ws>
<point name="WebCommonInfoBases"
enable="true"/>
</ws>
</point>

http://localhost/listservice2 adresindeki yayını tanımlayan default.vrd dosyası aşağıdaki gibidir:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/listservice2"
ib="File= X:\DB\ListBase;"
enable="false">
<ws>
<point name="WebCommonInfoBases"
enable="true"/>
</ws>
</point>

Paylaşımlı infobase listesini almak için web servisini yayınladığınız web sunucusunun ayarlarında, HTTP HEAD isteği devre dışı bırakılmalıdır (en azından sanal katalogların web servisine erişmesi için). Aksi takdirde web servisi kullanılamaz.

Başlat penceresi ayar formunda, yukarıda görüntülenen adrese sahip web servisini ekleyin ve ws son ekini belirtin: http://localhost/listservice/ws/.

Konfigürasyonu tamamladıktan sonra başlatıcıyı çalıştırın. 1C:Enterprise web servisine erişmek için bir kullanıcı adı ve şifre girmeniz istendiğinde Operator, Storekeeper, Accountant adlarını girmelisiniz. İlgili girdiler SharedBaseList kataloğuna eklenir. Her katalog elemanının IBList özelliğine v8i formatındaki listenizi yerleştirirseniz, bu liste kimlik doğrulamasından sonra başlatıcının infobase listesine eklenecektir.

<< Prev   Next >>

Icon/Social/001 Icon/Social/006 Icon/Social/005 Icon/Social/004 Icon/Social/002