对SiteFinity来说非常新。如何将现有DB (例如CSV或excel格式)导入到siteFinity中以在SF页面上进行交互?我想做一个数据集作为产品,也许另一个只是作为一个自定义的内容类型。但是如何导入已经存在的数据呢?我应该用.Net还是.?
发布于 2020-02-20 18:16:48
我会创建一个ServiceStack服务(随站点有限)来公开该csv数据,然后在任何地方使用它作为Json。如果目的是继续更新CSV作为主要数据源?我不确定这里的用法,您是否有一个外部系统可以转储到这个文件或其他什么?
如果不是这样的话,您应该使用ModuleBuilder (/ Sitefinity /Administration/Module-builder)在Sitefinity中创建数据类型,然后运行一个脚本导入数据(您成功了,MB提供了基于您的结构的示例导入代码)。
现在您有了更好的数据输入,并且通过使用的API\OData端点(更不用说所有的小部件都是自动生成的)正确地公开了它。
发布于 2020-02-26 04:45:41
首先,您需要创建动态模块,包括项目的数据字段。然后,您可以使用.net来创建api或sthing来导入CSV。
使用带有No和Title字段的产品数据的示例代码。
//read data from CSV
var attachedFile = System.Web.HttpContext.Current.Request.Files["CsvDoc"];
if (attachedFile == null || attachedFile.ContentLength <= 0) return Request.CreateResponse(HttpStatusCode.NoContent, "No data");
var csvReader = new StreamReader(attachedFile.InputStream);
string inputDataRead;
var values = new List<string>();
while ((inputDataRead = csvReader.ReadLine()) != null)
{
//values.Add(inputDataRead.Trim().Replace(" ", "").Replace(",", " "));
values.Add(inputDataRead);
}
values.Remove(values[0]);
//import to CMS
var dynamicModuleManager = DynamicModuleManager.GetManager();
var contentType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Product.Product");
foreach (var value in values)
{
var eachValue = value.Split(',');
if (!string.IsNullOrEmpty(eachValue[0]))
{
using (new ElevatedModeRegion(dynamicModuleManager))
{
var newcontent = dynamicModuleManager.CreateDataItem(contentType);
newcontent.SetValue("No", eachValue[0] != "" ? eachValue[0] : string.Empty);
newcontent.SetValue("Title", eachValue[1] != "" ? eachValue[1] : string.Empty);
newcontent.UrlName = Regex.Replace(eachValue[1].ToLower(), @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-");;
newcontent.Author = "ImportCSV";
newcontent.SetWorkflowStatus(dynamicModuleManager.Provider.ApplicationName, "Published");
dynamicModuleManager.SaveChanges();
}
}
}CSV文件如下:
不,头衔
1,Product1
2,Product2
https://stackoverflow.com/questions/60326007
复制相似问题