1818
1919using AggregatedGenericResultMessage ;
2020using AggregatedGenericResultMessage . Abstractions ;
21+ using DomainCommonExtensions . ArraysExtensions ;
2122using DomainCommonExtensions . DataTypeExtensions ;
2223using DynamicExcelProvider . Extensions ;
2324using DynamicExcelProvider . Helpers . DataTable ;
3435#endregion
3536
3637[ assembly: InternalsVisibleTo ( "GeneralDocumentGeneratorTests" ) ]
38+
3739namespace DynamicExcelProvider . Helpers
3840{
3941 /// -------------------------------------------------------------------------------------------------
@@ -112,18 +114,18 @@ internal static IResult<byte[]> Generate<TResult>(IReadOnlyCollection<TResult> d
112114
113115 var ms = new MemoryStream ( ) ;
114116 var wbDef = WorkbookParseBuildHelper . BuildAndParseToWorkbookDefinition (
115- sheetName ,
117+ sheetName ,
116118 outputProps ,
117119 embeddedModelCollection ,
118- data ,
120+ data ,
119121 false ) ;
120122 if ( wbDef . IsSuccess . IsFalse ( ) )
121123 return Result < byte [ ] > . Failure ( wbDef . GetFirstMessage ( ) ) ;
122124
123125 var document = SpreadsheetDocumentHelper . Instance . Write ( ms , wbDef . Response ) ;
124-
125- return document . IsSuccess . IsFalse ( )
126- ? Result < byte [ ] > . Failure ( document . Messages . FirstOrDefault ( ) ? . Message )
126+
127+ return document . IsSuccess . IsFalse ( )
128+ ? Result < byte [ ] > . Failure ( document . Messages . FirstOrDefault ( ) ? . Message )
127129 : Result < byte [ ] > . Success ( ms . ToArray ( ) ) ;
128130 }
129131
@@ -150,18 +152,18 @@ internal static IResult Generate<TResult>(Stream stream, IReadOnlyCollection<TRe
150152 var ( outputProps , embeddedModelCollection ) = infoDataModel . Response ;
151153
152154 var wbDef = WorkbookParseBuildHelper . BuildAndParseToWorkbookDefinition (
153- sheetName ,
154- outputProps ,
155- embeddedModelCollection ,
156- data ,
155+ sheetName ,
156+ outputProps ,
157+ embeddedModelCollection ,
158+ data ,
157159 false ) ;
158160 if ( wbDef . IsSuccess . IsFalse ( ) )
159161 return Result . Failure ( wbDef . GetFirstMessage ( ) ) ;
160162
161163 var document = SpreadsheetDocumentHelper . Instance . Write ( stream , wbDef . Response ) ;
162-
163- return document . IsSuccess . IsFalse ( )
164- ? Result . Failure ( document . Messages . FirstOrDefault ( ) ? . Message )
164+
165+ return document . IsSuccess . IsFalse ( )
166+ ? Result . Failure ( document . Messages . FirstOrDefault ( ) ? . Message )
165167 : Result . Success ( ) ;
166168 }
167169
@@ -178,7 +180,7 @@ internal static IResult<byte[]> Generate(ExcelCollectionExportConfiguration expo
178180 {
179181 var infoDataModel = ( IResult < ( List < PropTranslateModel > , List < PropModel > ) > ) WorkbookParseBuildHelper
180182 . BuildAndParseInternalModelDynamic (
181- exportConfiguration . Configuration ,
183+ exportConfiguration . Configuration ,
182184 exportConfiguration . DataCollection . FirstOrDefault ( ) ) ;
183185 if ( infoDataModel . IsSuccess . IsFalse ( ) )
184186 return Result < byte [ ] > . Failure ( infoDataModel . GetFirstMessage ( ) ) ;
@@ -188,18 +190,18 @@ internal static IResult<byte[]> Generate(ExcelCollectionExportConfiguration expo
188190 var ms = new MemoryStream ( ) ;
189191
190192 var wbDef = WorkbookParseBuildHelper . BuildAndParseToWorkbookDefinition (
191- exportConfiguration . Configuration . SheetName ,
193+ exportConfiguration . Configuration . SheetName ,
192194 outputProps ,
193- embeddedModelCollection ,
194- exportConfiguration . DataCollection ,
195+ embeddedModelCollection ,
196+ exportConfiguration . DataCollection ,
195197 true ) ;
196198 if ( wbDef . IsSuccess . IsFalse ( ) )
197199 return Result < byte [ ] > . Failure ( wbDef . GetFirstMessage ( ) ) ;
198200
199201 var document = SpreadsheetDocumentHelper . Instance . Write ( ms , wbDef . Response ) ;
200202
201- return document . IsSuccess . IsFalse ( )
202- ? Result < byte [ ] > . Failure ( document . Messages . FirstOrDefault ( ) ? . Message )
203+ return document . IsSuccess . IsFalse ( )
204+ ? Result < byte [ ] > . Failure ( document . Messages . FirstOrDefault ( ) ? . Message )
203205 : Result < byte [ ] > . Success ( ms . ToArray ( ) ) ;
204206 }
205207
@@ -217,26 +219,26 @@ internal static IResult Generate(Stream stream, ExcelCollectionExportConfigurati
217219 {
218220 var infoDataModel = ( IResult < ( List < PropTranslateModel > , List < PropModel > ) > ) WorkbookParseBuildHelper
219221 . BuildAndParseInternalModelDynamic (
220- exportConfiguration . Configuration ,
222+ exportConfiguration . Configuration ,
221223 exportConfiguration . DataCollection . FirstOrDefault ( ) ) ;
222224 if ( infoDataModel . IsSuccess . IsFalse ( ) )
223225 return Result . Failure ( infoDataModel . GetFirstMessage ( ) ) ;
224226
225227 var ( outputProps , embeddedModelCollection ) = infoDataModel . Response ;
226228
227229 var wbDef = WorkbookParseBuildHelper . BuildAndParseToWorkbookDefinition (
228- exportConfiguration . Configuration . SheetName ,
230+ exportConfiguration . Configuration . SheetName ,
229231 outputProps ,
230- embeddedModelCollection ,
232+ embeddedModelCollection ,
231233 exportConfiguration . DataCollection ,
232234 true ) ;
233235 if ( wbDef . IsSuccess . IsFalse ( ) )
234236 return Result . Failure ( wbDef . GetFirstMessage ( ) ) ;
235237
236238 var document = SpreadsheetDocumentHelper . Instance . Write ( stream , wbDef . Response ) ;
237239
238- return document . IsSuccess . IsFalse ( )
239- ? Result . Failure ( document . Messages . FirstOrDefault ( ) ? . Message )
240+ return document . IsSuccess . IsFalse ( )
241+ ? Result . Failure ( document . Messages . FirstOrDefault ( ) ? . Message )
240242 : Result . Success ( ) ;
241243 }
242244
@@ -246,11 +248,15 @@ internal static IResult Generate(Stream stream, ExcelCollectionExportConfigurati
246248 /// </summary>
247249 /// <typeparam name="T">Generic type parameter.</typeparam>
248250 /// <param name="lcid">The lcid.</param>
251+ /// <param name="customOutFields">Custom user defined output/result fields.</param>
249252 /// <returns>
250253 /// The template.
251254 /// </returns>
252255 /// =================================================================================================
253- internal static IResult < byte [ ] > GenerateTemplate < T > ( int lcid ) where T : class
256+ internal static IResult < byte [ ] > GenerateTemplate < T > (
257+ int lcid ,
258+ IReadOnlyCollection < string > customOutFields = null )
259+ where T : class
254260 {
255261 const string sheetName = "Sheet1" ;
256262 var infoDataModel = WorkbookParseBuildHelper . BuildAndParseInternalModelDynamic (
@@ -260,26 +266,29 @@ internal static IResult<byte[]> GenerateTemplate<T>(int lcid) where T : class
260266
261267 var ( outputProps , embeddedModelCollection ) = infoDataModel . Response ;
262268
269+ if ( customOutFields . IsNullOrEmptyEnumerable ( ) . IsFalse ( ) )
270+ outputProps = outputProps . Where ( x => customOutFields ! . Contains ( x . CommonName ) ) . ToList ( ) ;
271+
263272 var ms = new MemoryStream ( ) ;
264273
265274 var wbDef = WorkbookParseBuildHelper . BuildAndParseToWorkbookDefinition (
266- sheetName : sheetName ,
275+ sheetName : sheetName ,
267276 outputProps : outputProps ,
268277 embeddedModelCollection : embeddedModelCollection ,
269- data : new List < T > ( ) ,
270- isDynamic : true ,
271- sourceRowType : typeof ( T ) ,
278+ data : new List < T > ( ) ,
279+ isDynamic : true ,
280+ sourceRowType : typeof ( T ) ,
272281 generateSheetValidations : true ) ;
273282 if ( wbDef . IsSuccess . IsFalse ( ) )
274283 return Result < byte [ ] > . Failure ( wbDef . GetFirstMessage ( ) ) ;
275284
276285 var document = SpreadsheetDocumentHelper . Instance . Write (
277- stream : ms ,
278- workBook : wbDef . Response ,
286+ stream : ms ,
287+ workBook : wbDef . Response ,
279288 appendSheetValidations : true ) ;
280289
281- return document . IsSuccess . IsFalse ( )
282- ? Result < byte [ ] > . Failure ( document . Messages . FirstOrDefault ( ) ? . Message )
290+ return document . IsSuccess . IsFalse ( )
291+ ? Result < byte [ ] > . Failure ( document . Messages . FirstOrDefault ( ) ? . Message )
283292 : Result < byte [ ] > . Success ( ms . ToArray ( ) ) ;
284293 }
285294
@@ -290,11 +299,16 @@ internal static IResult<byte[]> GenerateTemplate<T>(int lcid) where T : class
290299 /// <typeparam name="T">Generic type parameter.</typeparam>
291300 /// <param name="stream">The stream.</param>
292301 /// <param name="lcid">The lcid.</param>
302+ /// <param name="customOutFields">Custom user defined output/result fields.</param>
293303 /// <returns>
294304 /// The template.
295305 /// </returns>
296306 /// =================================================================================================
297- internal static IResult GenerateTemplate < T > ( MemoryStream stream , int lcid ) where T : class
307+ internal static IResult GenerateTemplate < T > (
308+ MemoryStream stream ,
309+ int lcid ,
310+ IReadOnlyCollection < string > customOutFields = null )
311+ where T : class
298312 {
299313 const string sheetName = "Sheet1" ;
300314 var infoDataModel = WorkbookParseBuildHelper . BuildAndParseInternalModelDynamic (
@@ -304,6 +318,9 @@ internal static IResult GenerateTemplate<T>(MemoryStream stream, int lcid) where
304318
305319 var ( outputProps , embeddedModelCollection ) = infoDataModel . Response ;
306320
321+ if ( customOutFields . IsNullOrEmptyEnumerable ( ) . IsFalse ( ) )
322+ outputProps = outputProps . Where ( x => customOutFields ! . Contains ( x . CommonName ) ) . ToList ( ) ;
323+
307324 var wbDef = WorkbookParseBuildHelper . BuildAndParseToWorkbookDefinition (
308325 sheetName : sheetName ,
309326 outputProps : outputProps ,
@@ -316,8 +333,8 @@ internal static IResult GenerateTemplate<T>(MemoryStream stream, int lcid) where
316333 return Result . Failure ( wbDef . GetFirstMessage ( ) ) ;
317334
318335 var document = SpreadsheetDocumentHelper . Instance . Write (
319- stream : stream ,
320- workBook : wbDef . Response ,
336+ stream : stream ,
337+ workBook : wbDef . Response ,
321338 appendSheetValidations : true ) ;
322339
323340 return document . IsSuccess . IsFalse ( )
0 commit comments