6.1.2. Web servislerin kullanılması
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.
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:
String. Paylaşılan Infobase listesinin güncellenmesi gerekip gerekmediğini kontrol etmek için kullanılan istemci kimliğini içerir.
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.
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:
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:
- http://localhost/listservice. Anonim web servisi.
- http://localhost/listservice2. Kimlik doğrulamasını gerektiren web servisi.
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.