Hi Alex, ich versuch das mal ein wenig rüber zu bringen was ich mache :-), sorry ging nicht früher.
Vorweg es ist eine Web Anwendung (mvc)
Also ich hab eine Klasse Document in meinen Models welche ich als CustomizedRepository Item sozusagen verwenden.
In meinem Konstruktor für die Repository übergebe ich schon das currentDocument, ich habe in meinem Model ein public HttpPostedFileBase File { get; set; }, daraus entsteht mein new Document also →
Nur so als Beispiel mal sind natürlich mehr Infos normalerweise
var document = new Document()
{
Name = model.Name ?? model.File.FileName,
IsRepoitem = true,
Filename = model.Name,
TypeOfDocument = model.TypeOfDocument,
DefaultPrinterType = model.DefaultPrinterType
};
Dann wird der Import aufgerufen, die Repository Klasse hat eine Property currentDocument vom Typ Document, da stehen zur lifetime alle Infos drin, den übergebe ich im Repository Konstruktor, daher brauche ich das importUserData gar nicht.
UIname setze ich folgendermaßen im CreateOrUpdateItem(…)
public const int GermanLocalId = 1031;
if (item.ExtractDisplayName(GermanLocalId) == null)
{
var descriptorString = item.Descriptor;
var descriptor = RepositoryItemDescriptor.LoadFromDescriptorString(descriptorString);
descriptor.SetUIName(GermanLocalId, currentNeededItem.Name);
item.Descriptor = descriptor.SerializeToString();
}
da ich das noch für AddNewItem verwende, also LL CreateOrUpdateItem(…) auch für ein neues Projekt aufruft, kriegt mein document was ich im dbcontext später (als DB) speichere noch das hier im CreateOrUpdateItem(…)
var document = dataContext.Documents
.SingleOrDefault(x => x.ItemRepoId == item.InternalID);
if (document == null)
{
document = new Document()
{
IsRepoitem = true,
};
dataContext.Documents.Add(document);
}
document.ItemRepoId = item.InternalID;
document.ItemRepoType = item.Type;
document.Descriptor = item.Descriptor;
document.LastModification = item.LastModificationUTC.ToLocalTime();
document.UserId = userId;
document.Filename = document.Filename == null ? item.ExtractDisplayName() : document.Filename;
document.Name = item.ExtractDisplayName();
Da ich verschiedene Dinge mache und CreateOrUpdateItem für Import, New usw. aufgerufen wird, habe ich noch eine eigene zweite Import Funktion die in CreatOrUpdateItem aufgerufen wird mit einem IsImport Switch (denn ich vor ImportWithDependency setze)
In meiner Import Funktion:
if (item.Type == RepositoryItemType.Image.Value || item.Type == RepositoryItemType.PDF.Value)
{
document.Filename = item.ExtractDisplayName(0);
if (isDependencyImport) // das setze ich global in der Klasse vor dem ImportWithDependency , damit die Bilder etc. nicht den Namen vom Projekt bekommen und damit ich unterscheiden kann ob ich über ImportImageFile komme.
{
document.Name = item.ExtractDisplayName(0);
document.TypeOfDocument = DocumentType.Unknown;
}
}
else
{
document.Filename = document.Filename ?? item.ExtractDisplayName();
if (isPrinterDefinitionsFile) // da ist für den Import von P-Files
{
document.Name = string.Format("{0}{1}", "P-", document.Filename ?? item.ExtractDisplayName());
}
}
Meine eigentliche Import Funktion in der Repository welche der controller aufruft sieht so aus->
public void ImportDocument(string filePath, string printerDefinitionsFilePath, Document document)
{
var fileType = GetRepositoryItemTypeForFileExtension(Path.GetExtension(filePath).ToLower());
pFilePath = printerDefinitionsFilePath;
isImportFile = true;
using (RepositoryImportUtil util = new RepositoryImportUtil(this))
{
using (ListLabel LL = new ListLabel(){FileRepository = this})
{
if (RepositoryItemType.IsProjectType(fileType))
{
isDependencyImport = true;
util.ImportProjectFileWithDependencies(LL, filePath);
}
else if (fileType == RepositoryItemType.Image)
{
//usw. usw.
Es ist ein wenig komplex und ich kann nicht alles hier posten
, ich hoffe es gibt hier einen Ansatz für dich, ansonsten frag gerne, kein Problem 