Search code examples
listlabel

RepositoryItem from List&Label .lst file


Currently we are using a WPF application for creation/editing of List&Label Templates, but we are considering to move to the WebDesigner. Because we use project includes we need to use the repository mode.

I've been trying to import our existing templates, but I run into some issues regarding the RepositoryItemDescriptor. To create a RepositoryItem object you have to give a Descriptor in the constructor, but I cannot find any info regarding how you get it from the generated .lst file.

The data that we have at our disposal are:

  • TemplateType: List or Form
  • TemplateData: content of the .lst file (byte[])
  • IsMainTemplate: bool, is a "project include" or not
  • File name: name of the .lst file

The RepositoryItem constructor requires: string internalID, string descriptor, string type, DateTime lastModificationUTC.

What I have now is:

public class TemplateBaseModel : RepositoryItem
{
    // Properties

    // we have our own Ids and modification date, override RepositoryItem properties
    public new InternalID => $"repository://{{{Id}}}";
    public DateTime LastModificationUTC => ModifiedOn; 

    public TemplateBaseModel() : base($"repository://{{{Guid.NewGuid()}}}", /* ?? */, RepositoryItemType.ProjectList.Value, DateTime.Now) { }
    public TemplateBaseModel(string internalID, string descriptor, string type, DateTime lastModificationUTC) : base(internalID, descriptor, type, lastModificationUTC) { }
}

In the documentation I can only find what it is (internal metadata that is serialized into a string, and can be edited with the class RepositoryItemDescriptor), but not how it's created or how you can get it, and if I try to debug the example I get (in the CreateOrUpdate() method)@2@PgUAAENoS19QYWNrZWQAeNqd1E1PE1EYxfHfmsTvMAyJEeLY8iKCtpChU5MmvAiOC2NcjDCYmqFtZkaEqF9dXThgsTVGt/fm+Z9zz3lyv3/r2HXlQiFwKVeqDI2NdIVWPdIWCuRGTo2dGRp5ryv0Suq5yKpNoUCllhk5kymMjeS6QtdyldCuHfcs6FgUiQQSqUQgEk3dJY70pF57oS8wURo7N1TIBd64Z0GgY1HfodRA6rXAqVIgdN+SK21tbZlnt4o9J41W2OjNo9Qy72Y421OcVGzvD6R9fQcNcdb7A4WhSm3FQ4GhWu7CimUrt6T5rJvJacruHcruHEosldo38PI3ykjmQi7Qk4ilYoElJ/qOvTJwoi+Z4s33daMeeGDJiyna8szs725+zf6vmz8Tf+71U5WJzGmT/5ncucxHhdoXE6VcJVe6lFsWCGdOQzsCb+ds8I3T6R2+2/qv/ZjNvit0IjcxVhmqjZWuDZpXhHfanE2rKzSQCO0o53Ceamn5rGdTrC3Ws6YtkuiJbYts2LJlXWRbbNWayIbEE7E9sZ4Na9Y91vdVR+vWx9+9pa5NmvwKhVaTzQe5U7WWQqX+R+q+TKV20PxI54ZyZ0I7LmXK5t17PkkcOnSkdKxtT6pwLNbVnava0brt6abP1txGfwD+q8AH, which doesn't help either.

Any idea how to properly create a RepositoryItem from a .lst file? or how to create/get the descriptor?


Solution

  • You should try and use the class RepositoryImportUtil from the combit.ListLabel23.Repository namespace. This helper class does all the hard work for you. Given an IRepositoryinterface and the lst file in place, the required code would be something like

    IRepository listLabelRepository = <yourRepository>;
    
    using (ListLabel LL = new ListLabel())
    {
        LL.FileRepository = listLabelRepository;
        using (RepositoryImportUtil importUtil = new RepositoryImportUtil(listLabelRepository))
        {
            importUtil.ImportProjectFileWithDependencies(LL, 
                @"<PathToRootProject>");
        }
    }
    

    If this method is not what your require, the helper class has a couple of other methods as well to help you importing existing projects.