日付または数値タイプのメタデータ フィールドに値を割り当てるにはどうすればよいですか?
-
12-12-2019 - |
質問
次のリンクのコードを使用してメタデータ フィールドを処理しています。
https://code.google.com/p/tridion-practice/wiki/ChangeContentOrMetadata
しかし、日付型のメタデータ フィールドに値を割り当てようとすると、次の XML 検証エラーが発生します。
"System.ServiceModel.FaultException`1 [myporject.servicereference.coreerviceFault]:XML検証エラー。理由:「uuid:myUUID:dateField」要素が無効です - 値「10/4/2012 03:04:00 AM」は、データ型「http://www.w3.org/2001/XMLSchema:dateTime」によれば無効です。 - 文字列「10/4/2012 03:04:00 AM」は有効な DateTime 値ではありません。(障害の詳細はmyporject.servicereference.coreservicefaultに等しい) "
値を文字列または DateTime データ型として割り当てても、同じエラーが発生します。また、AddValue メソッドを Datetime データ型でオーバーロードしようとしましたが、これまでのところ何も機能しません。
AddValue メソッドのコード スニペット:-
public void AddValue(string value1)
{
string value = string.IsNullOrEmpty(value1) ? null : value1; ;
XmlElement newElement = fields.AddFieldElement(definition);
if (value != null) newElement.InnerText = value;
}
日付と数値の両方のデータ型に対する解決策を提案してください。前もって感謝します
解決 5
いくつかのトラブルシューティングの後、私はついに問題を解決し、日付のフォーマットを解決します。このため、ローカルマシンのタイムゾーンとサーバーのタイムゾーンと一致する必要があります。
以上は過負荷法のコードです。 -
public void AddValue(DateTime value1)
{
DateTime value = value1 == null ? DateTime.MinValue : value1;
XmlElement newElement = fields.AddFieldElement(definition);
if (value != null) newElement.InnerText = value.ToString("yyyy-MM-ddThh:mm:ss");
}
. 他のヒント
エラー メッセージは、日付形式が間違っているという事実を非常に明確に示しています。 The string '10/4/2012 03:04:00 AM' is not a valid DateTime value
.
Tridion が期待する形式は次のとおりです YYYY-MM-DDThh:mm:ss
, したがって、スペース、タイムゾーン、AM/PM マーカーはありません。
公式 Tridion API では、受け入れられるため、通常、自分で変換を行う必要はありません。 DateTime
オブジェクトを見つけて、正しい形式に変換します。ただし、使用するヘルパー クラスは公式 API ではないため、いくつかのショートカットを使用し、値を string
.
私が通常使用するのは datetime.ToString("u").Replace(" ", "T").Replace("Z", "")
日付を正しい形式で取得します。
日付文字列には、次のようなフォーマットがあるはずです。
- yyyy-mm-ddthh:mm:ss
例:
- "2012-10-03t09:39:43"
それに加えて、あなたがコンテンツとメタデータのラッパーを使用していることを考えると、日付を設定しているような方法は私には少し複雑です。
string myStringDate = "2012-10-03T09:39:43";
fields["DateFieldName"].Value = myStringDate;
component.Metadata = fields.ToString();
. 私のC#の経験の経験は、DateTime形式の問題によりそのようなエラーが発生します。 下のコード
を試すことができますDateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd");
.
私はあなたのコードでそれをテストしていませんが、それがあなたの訴訟で働くことを願っています。
あなたの形式の日付と時刻の間に 't'区切り記号がありません。出力された日付があなたが再挿入しようとしている形式であることを言及しましたが、出力されているものはいつでもフォーマットされることができますが、必ずしも日付を指定する必要はありません。
ここでは、XMLSchema DateTime仕様のクローズ読み出しがあります。 http:// www。w3.org/tr/xmlschema-2/#datetime