Daten vom Wertspeicher 1s empfangen 8.3. Einschränkungen beim Arbeiten mit dem Web-Client

In einem Wertspeicher können nahezu alle Informationen gespeichert werden, z.B.

... Bilder (Fotos):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types zusätzlicher Informationen von Objects.Image; Storage = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// an dieser Stelle wird alles angezeigt... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...Tabellendokument:

TabDoc=Neues tabellarisches Dokument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Schreiben();

EndProzedur

Prozedur RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Wenn TabDoc<>Undefiniert ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

EndProzedur

...beliebige Dateien (Binärdaten):

XZ = NewValueStorage(NewBinaryData(file));

Eight unterstützt die Komprimierung der im Speicher abgelegten Daten:

XZ = NewValueStorage(NewBinaryData(file),NewDataCompression(9));

... externe Verarbeitung und Berichterstattung:

Prozedur LoadProcessingIntoStorage(PropsStorageType)

CompressionRate = NewDataCompression(9); //9 Maximum PropsStorageType = New StorageValues(New BinaryData("c:\reports\report.epf", Komprimierungsrate));

EndProzedur

Prozedur StartProcessingFromStorage(PropsStorageType)

TemporaryFileName = TemporaryFileDirectory()+"report.epf"; BinaryData = PropsStorageType.Get(); BinaryData.Write(TemporaryFileName); ExternalProcessing = ExternalProcessing.Create(TemporaryFileName); ExternalProcessing.GetForm().Open();

EndProzedur

Arbeiten mit Speicher

Wenn es sich um Binärdaten handelte, können diese mit der Get-Methode aus dem Wertespeicher wiederhergestellt und mit der Write()-Methode in eine Datei geschrieben werden.

Wenn TypeValue(Storage)<>Typ("BinaryData") Dann

BinaryData = Storage.Get();

BinaryData = Speicher;

endIf; BinaryData.Write(FileName);

Handelt es sich beispielsweise um ein Word-Dokument (Doc-Datei oder anderer registrierter Dateityp), dann kann es wie folgt geöffnet werden:

LaunchApplication(Dateiname);

Um ein Feld vom Typ „Wertspeicher“ zu löschen, müssen Sie es „Undefiniert“ zuweisen:

PropsStorage = Undefiniert;

Arbeiten mit Dateien und Bildern in der integrierten Sprache 1C:Enterprise 8

Zweck

Die verwaltete Anwendung implementiert einen neuen Mechanismus zum Arbeiten mit Dateien. Es ermöglicht den Dateiaustausch zwischen der Infobase und der Client-Anwendung. Die Besonderheit dieses Mechanismus besteht darin, dass er für den Einsatz in einem Thin Client und einem Webclient konzipiert ist und die durch Webbrowser auferlegten Einschränkungen bei der Arbeit mit Dateien berücksichtigt.

Bei dem Mechanismus handelt es sich um eine Reihe von Methoden, mit denen lokal auf dem Computer des Benutzers gespeicherte Daten in einem temporären Speicher der Informationsdatenbank abgelegt, diese Informationen aus dem temporären Speicher in die Datenbank übertragen und wieder an den Computer des Benutzers gesendet werden können. Die häufigsten Anwendungsprobleme, die durch diesen Mechanismus gelöst werden, sind die Speicherung begleitender Informationen, beispielsweise Bilder von Waren, Dokumente zu Verträgen usw.

Methodenumfang

Zwischenlagerung

Die temporäre Speicherung ist ein spezieller Bereich der Informationsbasis, in dem Binärdaten abgelegt werden können. Der Hauptzweck ist die vorübergehende Speicherung von Informationen während der Client-Server-Interaktion, bevor sie in die Datenbank übertragen werden.

Die Notwendigkeit einer temporären Speicherung entsteht, weil das Betriebsmodell des Webbrowsers erfordert, dass die vom Benutzer ausgewählte Datei direkt auf den Server übertragen wird, ohne dass die Möglichkeit besteht, sie auf dem Client zu speichern. Bei der Übertragung einer Datei wird diese im temporären Speicher abgelegt und kann dann beim Schreiben eines Objekts in die Datenbank verwendet werden.

Die typischste Anwendungsaufgabe, die durch temporäre Speicherung gelöst wird, ist die Bereitstellung des Zugriffs auf Dateien oder Bilder, bevor das Objekt beispielsweise in Form eines Elements in der Informationsbasis erfasst wird.

Eine im Speicher abgelegte Datei oder Binärdaten wird durch eine eindeutige Adresse identifiziert, die später für Schreib-, Lese- oder Löschvorgänge verwendet werden kann. Diese Adresse wird von Methoden zum Schreiben einer Datei in den temporären Speicher angegeben. Mit einer separaten Methode in der integrierten Sprache können Sie feststellen, ob es sich bei der übergebenen Adresse um eine Adresse handelt, die auf Daten im temporären Speicher verweist.

Informationsbasis

Der Mechanismus ermöglicht den Zugriff auf Binärdaten, die in Attributen des Typs „Value Storage“ gespeichert sind.

Wie bei der vorübergehenden Speicherung ist der Zugriff auf Informationen über eine spezielle Adresse möglich. Sie können es über eine spezielle Methode erhalten, indem Sie einen Link zu einem Objekt oder einen Eintragsschlüssel für ein Informationsregister sowie den Namen des Attributs übergeben. Bei einem tabellarischen Teil ist zusätzlich die Übergabe des Zeilenindex des tabellarischen Teils erforderlich.

Methoden zum Arbeiten mit Dateien unterliegen beim Arbeiten mit Infobase-Details Einschränkungen. Für sie steht im Gegensatz zur temporären Speicherung nur das Lesen von Informationen zur Verfügung, nicht jedoch das Schreiben oder Löschen.

Beschreibung der Methoden zum Arbeiten mit Dateien

Daten im temporären Speicher speichern

Das typischste Szenario für die Verwendung dieses Mechanismus besteht darin, Benutzerdaten zunächst im temporären Speicher abzulegen. Hierfür gibt es zwei Methoden: PlaceFile() und PlaceFileInTemporaryStorage().

Die erste Methode, PlaceFile(), platziert eine Datei aus dem lokalen Dateisystem im temporären Speicher. Die Methode kann eine Zieladresse im Speicher akzeptieren. Wenn es nicht definiert ist oder eine leere Zeichenfolge ist, wird eine neue Datei erstellt und die Methode gibt ihre Adresse über den entsprechenden Parameter zurück.

Wenn der Parameter, der den interaktiven Betriebsmodus bestimmt, True ist, zeigt die Methode ein Standarddialogfeld zur Dateiauswahl an, in dem Sie eine Datei auswählen können, die im Speicher abgelegt werden soll. In diesem Fall gibt die Methode auch die Adresse der ausgewählten Datei zurück.

Infolgedessen gibt die Methode „False“ zurück, wenn der Benutzer interaktiv die Ausführung einer Operation im Dateiauswahldialog abgelehnt hat. Die Methode ist nur auf dem Client verfügbar.

Die zweite Methode, PlaceFileInTemporaryStorage(), ähnelt der vorherigen, außer dass sie auf dem Server verfügbar ist und die in den temporären Speicher zu schreibenden Daten nicht als Pfad im Dateisystem, sondern als Typvariable dargestellt werden Binärdaten. Wenn keine Zieladresse angegeben wird, wird ebenfalls eine neue Datei im Speicher erstellt. Seine Adresse wird als Ergebnis der Funktion zurückgegeben.

Abrufen einer Datei aus dem temporären Speicher

Wenn Sie ein Objekt in die Infobase schreiben, müssen Sie möglicherweise Daten aus dem temporären Speicher extrahieren und beispielsweise in einem Attribut ablegen. Hierfür gibt es eine entsprechende Servermethode – GetFileFromTemporaryStorage(). Diese Methode ruft Daten aus dem temporären Speicher ab und gibt sie als Ergebnis zurück. Dazu müssen Sie die Adresse im temporären Speicher angeben. Diese Adresse wird von den oben beschriebenen Methoden PlaceFile() und PlaceFileInTemporaryStorage() zurückgegeben, wenn diese erfolgreich ausgeführt werden.

Löschen einer Datei aus dem temporären Speicher

Nachdem die Daten in den Details gespeichert wurden, kann die Datei im temporären Speicher gelöscht werden. Zu diesem Zweck gibt es eine Methode DeleteFileFromTemporaryStorage(), die eine Datei aus dem temporären Speicher löscht. Die Methode verwendet als Parameter die Adresse einer Datei im temporären Speicher. Verfügbar auf dem Server.

Überprüfung der Adresse zur Zwischenspeicherung

Die Dateiadresse kann sowohl die temporäre Speicherung als auch Details in der Infobase angeben. Um seinen Typ zu überprüfen, gibt es die Methode This isTemporaryStorageAddress().

Es prüft, ob es sich bei der übergebenen Adresse um eine Adresse handelt, die auf den Store verweist. Gibt „True“ zurück, wenn die Adresse auf temporären Speicher verweist. Die Methode ist auf dem Server verfügbar.

Erhalt der Requisitenadresse

Nachdem die Daten in den Details der Infobase abgelegt wurden, müssen Sie möglicherweise über Dateimethoden darauf zugreifen.

Doch bevor Sie Daten, beispielsweise von einer Immobilie, erhalten, müssen Sie die Adresse dieser Immobilie erfahren. Zu diesem Zweck gibt es eine Methode GetFileAddressInInformationBase().

Sein Zweck besteht darin, die Dateiadresse in der Infobase gemäß den ursprünglichen Parametern zurückzugeben. Dazu müssen Sie den Objektschlüssel (dies kann entweder ein Link zum Objekt oder ein Informationsregistereintragsschlüssel sein) und den Namen des Attributs übergeben. Wenn Sie die Adresse einer Datei abrufen müssen, die in einem tabellarischen Teilattribut gespeichert ist, müssen Sie vor dem Attributnamen im Parameter, der den Attributnamen angibt, den Namen des tabellarischen Teils und einen Punkt „.“ hinzufügen. Die Methode ist sowohl auf dem Client als auch auf dem Server verfügbar.

Abrufen einer Datei aus der Infobase

Die Methode GetFile() empfängt eine Datei aus der Infobase und speichert sie im lokalen Dateisystem des Benutzers. Der erste Parameter gibt die Adresse der Datei in den Requisiten oder im temporären Dateispeicher an. Der zweite Parameter gibt den Zielspeicherort der resultierenden Datei an. Im nicht interaktiven Modus müssen Sie den Pfad angeben. Im interaktiven Modus ist der Parameter optional.

Standardmäßig wird die Methode im interaktiven Modus ausgeführt, d. h. der letzte Parameter ist True. Dies bedeutet, dass ein Dialogfeld angezeigt wird, in dem Sie eine Aktion mit der empfangenen Datei festlegen können: sie ausführen oder an einem vom Benutzer angegebenen Speicherort speichern. Wenn der interaktive Modus aktiv ist und der Parameter Dateipfad des Zieldatenträgers nicht angegeben ist, ist der Vorgang zum Öffnen der Datei nicht verfügbar. Gibt einen booleschen Wert zurück. Falsch bedeutet, dass der Benutzer den Vorgang im interaktiven Dialogfeld zum Speichern der Datei abgebrochen hat.

Beispiel für die Verwendung von Dateimethoden

// Empfangen einer Datei von der Festplatte im interaktiven Modus // und Ablegen im temporären Speicher &Auf der Client-Prozedur SelectDiskFileAndWrite()

Variable SelectedName; VariableTemporaryStorageAddress; If PutFile(TemporaryStorageAddress, SelectedName, True) Then Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); endIf;

EndProzedur

// Kopieren einer Datei aus dem temporären Speicher in ein Verzeichnis // Attribut, Aufzeichnen eines Objekts, Löschen einer Datei aus dem temporären Speicher // &Auf dem Server Verfahren Objektdatei platzieren (temporäre Speicheradresse)

Verzeichniselement = Form AttributesValue("Object"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Directory Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = Neue Datei(DirectoryItem.FileName); Directory Item.FileName = FilePathOnDisk.Name; Verzeichniselement.Write(); Geändert = Falsch; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueFormAttributes(Directory Element, "Object");

EndProzedur

// Eine Datei aus den Requisiten lesen und // auf der lokalen Festplatte im interaktiven Modus speichern &Auf der Client-Prozedur ReadFileAndSaveToDisk()

Address = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Address, Object.FileName, True);

EndProzedur

Unterstützung für Adressen im Bildfeld

Das Bildfeld-Steuerelement unterstützt die Anzeige eines Bildes, das durch die Adresse einer Datei im temporären Speicher oder in einer Datenbank angegeben wird.

Dazu müssen Sie in der Data-Eigenschaft des Formularelements ein String-Typ-Attribut festlegen. Der Wert dieses Attributs wird als Adresse des Bildes interpretiert.

Beispiel // Binden des Bildfelds an die Bildadresse im temporären // Speicher. AddressPictures bilden Details vom Typ String

PlaceFile(PictureAddress,True)

Picture.Data = AddressPictures

Einschränkungen beim Arbeiten mit dem Web-Client

Die Funktionsweise des beschriebenen Mechanismus bei Verwendung des Webclients weist einige Einschränkungen auf. Diese Einschränkungen hängen mit dem Sicherheitsmodell des Browsers zusammen. So kann der Client beispielsweise eine Datei nicht selbstständig im lokalen Dateisystem speichern, d. h. es steht nur die interaktive Version der Client-Methoden PlaceFile() und GetFile() zur Verfügung. Beim Versuch, den nicht interaktiven Modus zu verwenden, wird eine Ausnahme ausgelöst. Die interaktiv angezeigten Dialogfelder sind spezifisch für Ihren Browsertyp.

Funktionen beim Arbeiten mit Value Storage auf dem Client

Problem:

Wenn ein Dokument im tabellarischen Abschnitt über ein Attribut vom Typ „Wertspeicher“ verfügt, verlangsamt es das Öffnen des Dokumentformulars, wenn dieses Attribut große Datenmengen enthält.

Vermuteter Grund:

Möglicherweise wird beim Öffnen eines Formulars nicht der Link zu den im Value Store befindlichen Daten an den Kunden gesendet, sondern die Daten selbst.

Lösung

  • In den Eigenschaften des Tabellenattributs des Formulars gibt es ein Flag „Immer verwenden“. Wenn es gesetzt ist, wird der Inhalt des Feldes immer zwischen dem Server und dem Client übertragen – beispielsweise beim Öffnen eines Formulars. Dieses Flag muss deaktiviert sein, dies muss jedoch im Code berücksichtigt werden, da auf dem Client standardmäßig kein Wert für dieses Feld vorhanden ist. Ein Beispiel finden Sie in 1C:Archive.

Es ist sogar noch besser zu verwenden Zwischenlagerung um Dateien zwischen Client und Server zu übertragen.

Wir haben ein Verzeichnis „Produkte“, in dessen Attribut „Daten“ Informationen in Form von Binärdaten gespeichert sind. Das Attribut selbst hat den Werttyp „Value Storage“. Der folgende Screenshot zeigt die Verzeichnismetadatenstruktur.

Um eine beliebige Datei von der Festplatte in Form eines Elements anzuhängen, wurde der Befehl „AttachFile“ implementiert. Der Programmcode ist in der folgenden Auflistung dargestellt:

& Auf der Client-Prozedur AttachFile(Befehl) // Befehlshandler auf dem Client. Dateiauswahl // Dialog zum Auswählen einer Datei von der Festplatte Modus = FileSelectionDialogMode. Öffnung; OpenFileDialog = NewFileSelectDialog(Mode); OpenFile-Dialog. FullFileName = " " ; OpenFile-Dialog. MultipleSelect = False ; OpenFile-Dialog. Title = „Dateien auswählen“ ; Wenn FileOpenDialog. Select() Then FilePath = FileOpenDialog. Vollständiger Dateiname; // Binärdateidaten empfangen BinaryData = new BinaryData(PathToFile) ; // Binärdaten an den Server übertragen AttachFileServer(BinaryData) ; Ansonsten Text = "ru = " " Datei (s) nicht ausgewählt!" " ; en =" " Datei (s) nicht ausgewählt!" " " ; Warning(NStr(Text) ); EndIf ; EndProcedure & OnServer Procedure AttachFileServer(BinaryData) // Handler auf dem Server zum Aufzeichnen einer Datei in der Informationssicherheit // Das Formularobjekt in ein Referenzobjekt umwandeln ObjectCurrent = FormAttributesValue("Object" ); // Dem Attribut „Data“ einen neuen Wert zuweisen ObjectCurrent. Data = NewValueStorage(BinaryData) ; // Änderungen speichern ObjectCurrent. Schreiben() ; EndProzedur

Wenn wir den Algorithmus allgemein beschreiben, wird zunächst eine Datei von der Festplatte auf dem Client ausgewählt. Die resultierenden Binärdateidaten werden an den Server gesendet, wo sie in der Informationsbasis aufgezeichnet werden, und zwar im Attribut „Data“ des aktuellen Verzeichniselements.

Im Prinzip funktioniert alles. Beim Öffnen eines Elements können wir diese Daten nach Bedarf auslesen. Wenn beispielsweise ein Bild im Attribut gespeichert ist, können wir es abrufen und im Formularfeld anzeigen. Diese Lösung hat ihre Berechtigung, allerdings ist es bei den meisten Aufgaben nicht optimal, Attribute mit dem Werttyp „Wertspeicher“ in Verzeichnissen und Dokumenten zu verwenden. Und deshalb...

Auswirkungen auf die Leistung

Lassen Sie uns einige Leistungstests durchführen. Für die Tests werden zwei Elemente des Verzeichnisses „Produkte“ verwendet, mit und ohne angehängte Datei. Die Größe der angehängten Datei beträgt 5 Megabyte.

Alle Tests werden mithilfe der „GetElement“-Verarbeitung in der Testkonfiguration durchgeführt. Sie können diese Konfiguration über den Link am Ende des Artikels herunterladen.

Lassen Sie uns die Zeit messen, die zum Öffnen von Elementen im Verzeichnis „Produkte“ benötigt wird. Zum Öffnen eines Elements wird die globale Kontextmethode „OpenValue()“ verwendet, der als Parameter eine Referenz auf das Element übergeben wird. Lassen Sie uns die Öffnungszeit mit einem Standard-Leistungsmesstool messen. Die Ergebnisse werden im folgenden Screenshot dargestellt:

Wie wir sehen, ist die Zeit, die zum Öffnen eines Elements mit einer angehängten Datei benötigt wird, zehnmal länger! Machen wir noch einen Test. Führen wir die Methode „GetObject()“ aus, um auf das Produktkatalogelement zu verweisen. Das Testergebnis können Sie im folgenden Screenshot sehen.

Der Unterschied ist ziemlich groß. Der Empfang eines Elements ohne angehängte Datei ist 194-mal schneller!

Dies geschieht, weil die Methode „GetObject()“ alle Daten aus den Details des Verzeichniselements per Referenz erhält. Dementsprechend erhält die Methode nicht nur die Werte der Attribute „Code“ und „Name“, sondern auch den Wert des Attributs „Daten“. Wenn es Binärdaten mit einer Größe von 5 Megabyte speichert (wie in unserem Beispiel), werden diese Daten beim Empfang des Objekts im RAM abgelegt (wie andere Details) und dann an die Clientseite übertragen. Es ist der Empfang von Daten von diesem Attribut, der die Zeit zum Abrufen des Elementobjekts verlängert. Bei Verwendung eines dünnen Kommunikationskanals erhöht sich die Öffnungszeit aufgrund der Übertragung großer Informationsmengen über das Netzwerk noch deutlicher.

Hinweis: Beim Ausführen der Methode „OpenValue()“ wird zunächst auch das Verzeichniselementobjekt abgerufen, dann in ein Formularobjekt umgewandelt und an den Client übergeben (bei verwalteten Formularen). Das heißt, wenn ein Element per Referenz geöffnet wird, wird auch das Objekt abgerufen.

Führen wir einen abschließenden Test zur Zeit durch, die zum Öffnen und Schreiben eines Verzeichniselements mit und ohne angehängte Datei benötigt wird. Das Ergebnis ist im folgenden Screenshot dargestellt.

Natürliches Ergebnis. Es stellte sich heraus, dass die Zeit zum Empfangen und anschließenden Schreiben eines Verzeichniselements mit einer angehängten Datei etwa 19-mal länger war. Wie oben erwähnt, werden beim Empfang eines Objekts die Werte aller seiner Details abgerufen, einschließlich des Attributs „Daten“, in dem 5 Megabyte an Informationen gespeichert sind. Beim Schreiben eines Elements wird diese Datenmenge erneut in die Infobase geschrieben. Folglich wirkt sich das Speichern von Daten in einem Verzeichnisattribut (oder Dokument) mit dem Typ „Wertspeicherung“ negativ auf die Leistung sowohl beim Abrufen eines Objekts als auch beim Platzieren in der Infobase aus.

Wie lässt sich das Problem der Datenspeicherung für Informationsbasisobjekte am besten lösen?

Richtige Lösung

Wenn wir uns die Implementierung dieses Mechanismus in typischen Konfigurationen ansehen, werden wir feststellen, dass für Objekte zusätzliche Informationen in einer separaten Informationsregistertabelle gespeichert werden. So sieht beispielsweise der Anhangdateimechanismus in einer Standardkonfiguration von „Trade Management“ Version 11 aus.

Das Verzeichnis „Nomenclature“ ist Eigentümer des Verzeichnisses „NomenclatureAttachedFiles“. Dies ist wiederum mit dem Informationsregister AttachedFiles verknüpft, dessen AttachedFile-Dimension auf sein Element verweist. Somit werden an Informationsbasisobjekte angehängte Daten tatsächlich in der Informationsregistertabelle gespeichert, deren Betrieb praktisch nicht durch die in der Ressource gespeicherte Datenmenge beeinflusst wird. Das Zwischenverzeichnis „Nomenklatur angehängter Dateien“ ist notwendig, um zusätzliche Informationen zur angehängten Datei zu speichern und den Zugriff auf die angehängte Datei per Referenz zu unterstützen.

All dies bestätigt einmal mehr die enormen Auswirkungen einer ordnungsgemäß gestalteten Konfigurationsmetadatenstruktur auf die Leistung.

Testkonfiguration mit einem Beispiel aus dem Artikel: VERKNÜPFUNG .

Plattform 1C:Enterprise bietet viele Möglichkeiten zum Speichern von Daten unterschiedlicher Art.

Doch oft reichen diese Möglichkeiten nicht aus. Und dann kommt uns ein besonderer Gegenstand zu Hilfe - Speicherwerte. Mit diesem Objekt können Sie sowohl standardmäßige 1C:Enterprise-Objekte, beispielsweise eine Wertetabelle, als auch nicht standardmäßige Objekte, für die in der Plattform kein Typ bereitgestellt wird, in einem speziellen Format speichern. Nicht standardmäßige Typen können Dateien enthalten. Mithilfe eines Wertspeichers in einer 1C-Datenbank können Sie beispielsweise Fotos von Mitarbeitern, Scans von Dokumenten, externe Verarbeitung usw. speichern. Der Vorteil hierbei ist, dass alle diese Objekte in der Datenbank selbst gespeichert werden. Dementsprechend sind beim Bereitstellen einer neuen Datenbank aus einer Sicherungskopie alle diese Objekte auch in der neuen Datenbank vorhanden. Wenn Sie hingegen große Dateien in der Datenbank speichern, kann dies deren Volumen erheblich erhöhen und sich negativ auf die Leistung auswirken. Daher muss hier auf eine angemessene Balance geachtet werden.

Schauen wir uns die Arbeit mit einem Wertspeicher anhand eines Beispiels an. Erstellen wir im Konfigurator ein spezielles Verzeichnis – nennen wir es ExterneObjekte, und im Gegenzug erstellen wir die Voraussetzungen für das Verzeichnis Ein Objekt mit Typ Speicherwerte

Und jetzt können wir Elemente in diesem Verzeichnis und in Requisiten erstellen Ein Objekt Jedes Element wird in eine Datei geschrieben.

Die Zusammenarbeit mit einem Wertspeicher ist sehr einfach. Wenn wir uns den Syntaxhelfer ansehen, werden wir feststellen, dass dieses Objekt nur eine Methode und einen Konstruktor hat.

Lassen Sie uns nun zur Demonstration den einfachsten Code schreiben, der eine Datei in die Requisiten schreibt Ein Objekt ein zuvor erstelltes Verzeichniselement, lesen Sie dann diese Datei aus den Requisiten und schreiben Sie sie auf die Festplatte, jedoch unter einem anderen Namen.

&Auf der Serverprozedur LoadUnloadFile(Directory Element)Directory Object =Directory Element. GetObject() ; //Platziere das Bild im Wertespeicher LabelDownload = New Image("g:\musor\favicon.ico" ) NewValueStorage; //Schreibe ein Verzeichniselement Verzeichnisobjekt. DirectoryObject-Objekt. Schreiben() ; //Laden Sie das Bild aus dem Wertespeicher in eine Datei hoch FileName = "g:\musor\favicon_1.ico" ; LabelUpload = Verzeichnisobjekt. Ein Objekt. Erhalten() ; LabelUpload. Write(Dateiname) ; EndProzedur

Und ein paar Erklärungen zum Code.

  • Das Objekt wird direkt beim Erstellen des Speichers mit dem Konstruktor im Speicher platziert.

Um andere Dateitypen als Bilder im Speicher zu speichern, können Sie das Objekt verwenden Binärdaten. Rein theoretisch können Sie im Wertespeicher sogar Verzeichniselemente, Dokumente usw. ablegen. Aber in der Praxis macht das keinen Sinn. Manchmal ist es jedoch möglich, einen Wertespeicher zum Speichern einer Wertetabelle, eines Wertebaums und anderer universeller Sammlungen zu verwenden.