Sau khi biết được cách tìm content block qua Id bạn thấy khả năng tìm kiếm của mình được nâng cao hơn được một chút. Tuy vậy nhưng ta vẫn phải dựa vào thanh tìm kiếm trong Content Builder, và nếu có nhiều item trùng tên nhau thì ta vẫn phải click vào từng item đó để kiểm tra số Id một lần nữa.
Chưa kể, nếu bạn có dùng tìm kiếm theo Id của content builder nó vẫn trường hợp không tìm ra mặc dù thật sự có item đó. Vậy ta sẽ cần một cách robust hơn để trích xuất được thông tin chính xác và xa hơn nữa làm sau ta có thể tìm được vị trí của Data Extension. Đừng lo vì hôm nay Gâu Đần sẽ cùng bạn tìm cách cho vấn đề này nhé.
Folder object vs DataFolder object
Chẳng hạn như ở bài trước Gâu Đần tìm content block bằng Id và biết được Id của folder chứa content này là 427592
Category Id chính là folder Id chứa item này, và ta còn có parent ID chính là parent folder ID hay còn gọi là folder mẹ.
Trong MC, object đại diện cho folder ta có Folder object và DataFolder object
Vậy ta nên dùng cái nào?
Ở trong Folder object có ghi:
The Folder object is deprecated. Use DataFolder instead.
Vậy là Folder object bị thay thế bằng DataFolder object, tuy nhiên object này vẫn sử dụng được.
Và mỗi object khi sử dụng sẽ có những điểm cộng và điểm trừ, cùng cách sử dụng khác nhau. Bạn hãy xem qua ở bảng so sánh dưới đây:
Object | Folder object | DataFolder object |
Retrieve method | Core library | WSProxy |
Complexity | Simpler to utilize/understand | Harder to utilize/understand |
Flexibility | Limited | Can able to get more attributes |
Syntax | Different to the remaining one | Different to the remaining one |
Cách retrieve của từng object, response nhận được và kết luận
Vậy giờ Gâu Đần sẽ biểu diễn cách tìm tên folder này để mình có thể build được một path định vị chứa content này nhé.
Retrieve Folder object
<script runat="server">
Platform.Load("core", "1.1");
var folderID = 427592,
path = [],
hasMore = true;
var filter = {Property: "ID",SimpleOperator: "equals", Value: folderID};
var req = Folder.Retrieve(filter);
Write(Stringify(req));
</script>
Retrieve DataFolder object
<script runat="server">
Platform.Load("core", "1.1");
var folderID = 427592,
path = [],
hasMore = true;
var prox = new Script.Util.WSProxy();
var cols = ["ID", "Name", "ParentFolder.ID", "ParentFolder.Name", "CreatedDate"];
var filter = {Property: "ID",SimpleOperator: "equals", Value: folderID};
var req = prox.retrieve("DataFolder", cols, filter);
Write(Stringify(req));
</script>
Kết luận
Cả 2 object này đều sử dụng được và sử dụng library và method khác nhau.
Về độ phức tạp thì DataFolder object phức tạp hơn một xíu, vì bạn phải define những attribute muốn retrieve. Muốn làm được phải đọc document của MC, chưa kể doc của MC thì không phải cái gì họ ghi ra cũng đúng…
Về response thì bạn có thể “in” ra và so sánh, ta thấy cấu trúc của chúng gần giống nhau, và chính xác thì DataFolder sẽ có những attribute mà Folder không có (không có thì tất nhiên không thể retrieve được). Chẳng hạn như attribute “CreatedDate” , trong response ở Folder vẫn có attribute này tuy nhiên ta không có value chính xác như DataFolder
Mình thấy Folder object cũ rồi và rất có thể sẽ ngưng hoạt động trong tương lai,Gâu Đần recommend các bạn nên sử dụng DataFolder object vì tính linh hoạt và WSProxy cũng là một library make your life easier
Build full path dựa trên folder name
Idea
Ok như ở trên mình vừa chỉ cho các bạn cách retrieve những thông tin của folder qua folder ID, giờ để build full path thì ý tưởng ở đây ta sẽ:
- Tạo một empty array để chứa path
- Tạo một loop retrieve folder Id đến khi nào parent folder ID bằng 0 thì dừng
- Update folder ID bằng parent folder ID
- Mỗi vòng loop sẽ chèn folder name vào trước cái path array
<script runat="server">
Platform.Load("core", "1.1");
var folderID = 427592,
path = [],
hasMore = true;
var prox = new Script.Util.WSProxy();
var cols = ["ID", "Name", "ParentFolder.ID", "ParentFolder.Name", "CreatedDate"];
var filter = {Property: "ID",SimpleOperator: "equals", Value: folderID};
while(hasMore) {
var req = prox.retrieve("DataFolder", cols, filter);
var FolderName = req.Results[0].Name;
path.unshift(FolderName);
if (req.Results[0].ParentFolder.ID != 0) {
filter["Value"] = req.Results[0].ParentFolder.ID;
} else {
hasMore = false;
}
}
path = path.join(' /');
Write(path);
</script>
Result
Tìm thử trên content builder
Cuối cùng ta cũng tìm dc item mà ta cần tìm.
Bonus
Tìm bằng Folder object. Bạn cũng sẽ có được kết quả tương tự
<script runat="server">
Platform.Load("core", "1.1");
var folderID = 427592,
path = [],
hasMore = true;
var filter = {Property: "ID",SimpleOperator: "equals", Value: folderID};
while (hasMore) {
var req = Folder.Retrieve(filter);
var FolderName = req[0].Name;
path.unshift(FolderName);
if (req[0].ParentFolder.ID != 0) {
filter["Value"] = req[0].ParentFolder.ID;
} else {
hasMore = false;
}
}
path = path.join(' /')
Write(path);
</script>