هل يمكنني الحصول على كافة الحقول في عنصر (في Sitecore)؟
-
05-07-2019 - |
سؤال
وأنا أحاول كتابة استعلام SQL للحصول على كل الحقول في بند معين في Sitecore.
لأقول إنني عالقة يضع ملطفة.
وانا التخمين لقد القيام ببعض النفس الانضمام على الطاولة المجالات، ولكن أنا الحصول على نفسي في عقدة.
وأي شخص يحصل على أي أفكار؟
المحلول
في أي من الحالات يجب أن تحاول أبدا الاستعلام عن قاعدة بيانات Sitecore نفسك. تغيير قاعدة البيانات مع مرور الوقت وهذا من شأنه كسر الشفرة. وبدلا من ذلك، استخدم Item.Fields
. هذا هو مجموعة التي تحتوي على كافة الحقول الضرورية. إذا كنت ترغب في التأكد من أن يتم تحميل كافة الحقول (تحميل حقا، وليس كسول تحميلها)، مما يمكنك استخدام Item.Fields.ReadAll ().
وتحرير: أيضا، أن نضع في اعتبارنا أن الاستعلام لا يسمح لك لبناء عنصر، لذلك كنت أفتقد سلوك القيم الافتراضية وعدم استخدام Sitecore التخزين المؤقت ذكي على الإطلاق
نصائح أخرى
وحاول الاتصال Sitecore.Context.Item.Fields.ReadAll()
قبل النظر عن حقل.
والمحاولة الأولى، ولكن لا يقوم بإرجاع كافة المجالات
SELECT I2.Name FROM
Items AS I
JOIN UnversionedFields AS UF ON I.ID = UF.ItemId
JOIN VersionedFields AS V ON I.ID = V.ItemId
JOIN SharedFields AS S ON I.ID = S.ItemId
JOIN Items AS I2 ON I2.ID = UF.FieldId OR I2.ID=V.FieldId OR I2.ID = S.FieldId
WHERE I.ID = '110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9'
GROUP BY I2.Name
ومن خلال الدعوة item.Fields تحصل على حقول العنصر الذي كنت قد عينت في القوالب الخاصة بك وكذلك حقول مستوى Sitecore الموجودة على كل مادة. استخدام التعليمات البرمجية أدناه إذا كنت تريد فقط الحقول التي عرفتها في القوالب الخاصة بك. بالطبع، هذا على افتراض أسماء الحقول الخاصة بك لا تبدأ مع "__"
// Get Fields directly from the Item
List<string> fieldNames = new List<string>();
item.Fields.ReadAll();
FieldCollection fieldCollection = item.Fields;
foreach (Field field in fieldCollection)
{
//Use the following check if you do not want
//the Sitecore Standard Fields
if (!field.Name.StartsWith("__"))
{
fieldNames.Add(field.Name);
}
}